所以我在VS2012中使用数据源向导从我的数据库生成DataSet。
所以现在我正在尝试为数据库中的每个表填充自动生成的数据表以填充数据。但是我遇到了一些问题。
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);
所以现在问题是当我将Datatables传递给ContactsDataTable的构造函数时,我得到异常null引用异常“对象引用未设置为对象的实例。”
但是我知道数据表不是空的事实。
所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
简短的回答:调试它。
长答案:检查实际命令文本,然后将其与您使用相同凭据/授权执行它的假设进行比较。你有一个不正确的假设是肯定的。
我的猜测是没有表的值或手头的var
变量,你的LIKE
子句在功能上等同于相等比较,因为你在命令文本中缺少通配符你假设是在执行中,甚至是你缺少重要的字符串文字单引号。
也许这会像你期望的那样奏效:
SqlDataAdapter ad = new SqlDataAdapter(String.Format(@"SELECT * FROM Contacts WHERE {0} LIKE '%{1}%', var, textBox1.Text), connection);
答案 1 :(得分: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);