2014-01-06 223 views
1

我是新来asp.net和SQL服务器我写了一个代码来设置我的模型,我只需要一排,所以我写了这个代码:SQL Server查询返回null

我的模型

public class FullPackages 
{ 
    public int Id { get; set; } 
    public int TypeId { get; set; } 

    [Display(Name = "Package Type")] 
    public string TypeName { get; set; } 
    public int AllowedSMS { get; set; } 

    [Display(Name = "Time Span in Days")] 
    public int? TimeSpan { get; set; } 
    public decimal Price { get; set; } 
} 

我的方法

public ActionResult PackageDetails(int id = 0) 
    { 
     string sqlString = "select top 1 tblPackages.*, tblPackageTypes.Name from tblPackages join tblPackageTypes on tblPackages.TypeId = tblPackageTypes.Id where tblPackages.Id = "+id; 

     SqlConnection con = new SqlConnection(cnxn); // cnxn is defined 
     SqlCommand cmd = new SqlCommand(sqlString, con); 
     SqlDataReader dsr; 
     FullPackages package = new FullPackages(); 


      con.Open(); 

      dsr = cmd.ExecuteReader(); // this returns null value 

       package.Id = dsr.GetInt32(0); 
       package.TypeId = dsr.GetInt32(1); 
       package.TypeName = dsr.GetString(5); 
       package.AllowedSMS = dsr.GetInt32(2); 
       package.TimeSpan = dsr.IsDBNull(3) ? 0 : dsr.GetInt32(3); 
       package.Price = dsr.GetDecimal(4); 
      con.Close(); 

     return View(package); 
    } 

当我从的SqlString删除top 1它从数据库返回的值,但是当我保持top 1它返回null.And当我检查相同的sql与top 1在sql服务器Mgmt Studio它返回单行..为什么这样?请帮我....

+0

我想这是不工作的代码,因为ID被定义为int,但被附加到SQL选择字符串就好像它是字符串一样。 – NoChance

+0

@EmmadKareem不,它工作正常。我只是将int的值附加到字符串。另外当我删除'顶部1'的代码工作正常。 – Robz

+0

附加到字符串的数字会生成字符串。 –

回答

1

你可以做这样的事情,而不是你的代码:

string sqlString = "select top 1 tblPackages.*, tblPackageTypes.Name from tblPackages join tblPackageTypes on tblPackages.TypeId = tblPackageTypes.Id where tblPackages.Id = " + id; 
     SqlConnection con = new SqlConnection(cnxn); // cnxn is defined 

     SqlDataAdapter sda = new SqlDataAdapter(sqlString, con); 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 
     FullPackages package = new FullPackages(); 

     package.Id = Convert.ToInt32(dt.Rows[0][0]); 
     package.TypeId = Convert.ToInt32(dt.Rows[0][1]); 
     package.AllowedSMS = Convert.ToInt32(dt.Rows[0][2]); 
     package.TimeSpan = !DBNull.Value.Equals(dt.Rows[0][3]) ? Convert.ToInt32(dt.Rows[0][3]) : 0; 
     package.Price = Convert.ToInt32(dt.Rows[0][4]); 
+0

。这有帮助 – Robz