2014-01-06 224 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