2016-01-22 36 views
0

我有兩個類,一個用於數據庫連接,另一個用於獲取數據。當我使用SqlCommand類型作爲存儲過程時,它會正確返回數據表,但是當我將命令類型更改爲文本並正確更改命令文本時,它將返回空值。這是爲什麼發生?爲什麼Datatables在通過SQL命令文本執行時返回Null?

1個

public class DB_Connection 
{ 
    public SqlConnection cnn; 
    public SqlCommand cmd; 
    public SqlDataAdapter ada; 

    public DB_Connection() 
    { 
     cnn = new SqlConnection("Data Source=svr01;Initial Catalog=PDFScramble;Integrated Security=True"); 
     cnn.Open(); 

     cmd = new SqlCommand(); 
     cmd.CommandType = CommandType.Text;// *changed in here SP or Text* 
     cmd.Connection = cnn; 

     ada = new SqlDataAdapter(); 
     ada.SelectCommand = cmd;    
    } 

2級

public class Data : DB_Connection 
{ 
    public string DException { get; set; } 
    public DataTable Datatable { get; set; } 

    public bool GetCivicEntities() 
    { 
     try 
     { 
      cmd.CommandText = "SELECT Id, Description, StateId ,EntityTypeId FROM CivicEntities"; 
      ada.Fill(Datatable);// *Null in here* 
      return true; 
     } 
     catch (Exception ex) 
     { 
      DException = ex.Message; 
      return false; 
     } 
    } 
+2

誰初始化'Data.Datatable'屬性? – Dennis

+0

您是否在調用'GetCivicEntities()'之前創建**(實例化)'Datatable'?該方法本身從來沒有實例化該數據表 - 所以它已經在調用該方法之前實例化..... –

+0

檢查我的解決方案,並告訴我是否有幫助。 – mybirthname

回答

3

你的數據表是空的,因爲你有這樣的問題。這應該解決它。

cmd.CommandText = "SELECT Id, Description, StateId ,EntityTypeId FROM CivicEntities"; 
Datatable = new DataTable(); 
ada.Fill(Datatable); 
return true; 
+0

邑,它的工作,thax –

+0

@ShalinkaRandeniya確定答案是正確的。 – mybirthname

0

類結構有問題。請選擇此項

using (SqlConnection conn = new SqlConnection("connectionString")) 
{ 
SqlCommand cmd = null; 
SqlParameter prm = null; 
SqlDataAdapter dad = null; 
DataTable dt = new DataTable(); 

cmd = new SqlCommand("SPName", conn); 
cmd.CommandType = CommandType.StoredProcedure; 

conn.Open(); 
dad = new SqlDataAdapter(cmd); 


dad.Fill(dt); 
conn.Close(); 
} 


using (SqlConnection conn = new SqlConnection("connectionString")) 
{ 
SqlCommand cmd = null; 
SqlParameter prm = null; 
SqlDataAdapter dad = null; 
DataTable dt = new DataTable(); 

cmd = new SqlCommand("select * from dummy",conn); 
cmd.CommandType = CommandType.StoredProcedure; 
conn.Open(); 
dad = new SqlDataAdapter(cmd); 


dad.Fill(dt); 
conn.Close(); 
} 
+0

它的工作,但我仍然得到我的代碼的問題。它同樣的事情,它在我通過存儲過程調用時起作用。 –

+0

這是如何回答這個問題的?您的代碼示例與OP顯着不同。此外,在使用它們之前聲明所有變量有什麼意義? – Dennis

相關問題