2013-11-20 50 views
0

所以我使用VS2012中的數據源嚮導從我的數據庫生成數據集。用客戶查詢結果填充客戶生成的數據表

所以,現在我試圖填充數據庫中的每個表的自動生成的數據表來填充數據。但是我遇到了一些問題。

string var = comboBox1.Text; 
     SqlDataAdapter ad = new SqlDataAdapter(@"SELECT * FROM Contacts WHERE "+var+" LIKE "+textBox1.Text+";",connection); 
     DataTable dataTable = new DataTable(); 
     ad.Fill(dataTable); 
     ERPDataSet.ContactsDataTable dt = new ERPDataSet.ContactsDataTable(dataTable); 
     contactsTableAdapter.Fill(dt); 

所以現在這裏的問題是,當我通過數據表到ContactsDataTable的構造函數中我得到異常空引用異常「對象引用不設置到對象的實例。」

但是我知道一個事實,datatable不是空的。

所以這裏的任何幫助將不勝感激。

回答

0

簡答:調試它。

長答案:檢查實際命令文本,然後將它與通過使用相同憑證/權限執行它所假設的情況進行比較。這是肯定的,你有一個不正確的假設。

我不必在表中任一個值或在手var變量的猜測,那是你LIKE條款是功能上等同於相等比較,因爲你是,你是假設你的命令文本丟失通配符是出現在執行甚至是你缺少重要的字符串文字單引號。

也許這會工作,你希望:

SqlDataAdapter ad = new SqlDataAdapter(String.Format(@"SELECT * FROM Contacts WHERE {0} LIKE '%{1}%', var, textBox1.Text), connection);

+0

正如我所說,我知道DataTable不是空的事實。這提供了充足的證據'DataRow [] rows = dataTable.Select(); (dataRow [row]) MessageBox.Show(dataRow [0] .ToString()); MessageBox.Show(dataRow [1] .ToString()); }' –

+0

如果您不願意通過使用調試器直接且實際地挑戰您的假設,那麼您將無法解決您的問題。接受你有一個有缺陷的假設,在你的等式中是第一步。 –

+0

那麼,如果dataTable爲空我怎麼得到消息提示使用上面的代碼給我的數據作爲我的數據庫查詢的結果。反正我採用了你的代碼和它的空引用異常。 –

0

好了,所以我能直接執行對TableAdapter的查詢,而不是使用單獨的數據接口,以解決我的問題

 string var = comboBox1.Text; 
     contactsTableAdapter.Adapter.SelectCommand = new SqlCommand(@"SELECT * FROM Contacts WHERE " + var + " LIKE " + textBox1.Text + ";"); 
     contactsTableAdapter.Adapter.SelectCommand.Connection = connection; 
     contactsTableAdapter.Adapter.Fill(eRPDataSet.Contacts);