我遇到了一个奇怪的错误:
mycon.Open();
adap = new SqlDataAdapter("SELECT * FROM Employee; Select * from Shift; select * from Has_Shift", mycon);
adap.TableMappings.Add("T1", "Employee");
adap.TableMappings.Add("T2", "Shift");
adap.TableMappings.Add("T3", "Has_Shift");
adap.Fill(ds);
DataRow newRow = ds.Tables["T1"].NewRow();
newRow["Name"] = textBox1.Text;
ds.Tables["T1"].Rows.Add(newRow);
adap.Update(ds);
mycon.Close();
错误声明:
对象引用未设置为DataRow newRow行的对象实例。
我不知道为什么会这样。
答案 0 :(得分:0)
如果使用批处理SQL语句来检索多个表并填充 在DataSet中,第一个表是使用指定的表名命名的 填充方法。后续表使用指定的名称命名 到Fill方法加上从1开始并递增的数字 一。例如,如果您要运行以下代码:MSDN
所以代码将是
adap = new SqlDataAdapter("SELECT * FROM Employee; Select * from Shift; select * from Has_Shift", mycon);
// second table name will be Employee +1
adap.TableMappings.Add("Employee1", "Shift");
// second table name will be Employee +2
adap.TableMappings.Add("Employee2", "Has_Shift");
// give Table name as below
adap.Fill(ds, "Employee");
DataRow newRow = ds.Tables["Employee"].NewRow();
newRow["Name"] = textBox1.Text;
ds.Tables["Employee"].Rows.Add(newRow);
adap.Update(ds);
mycon.Close();
此处我们在Fill方法中将"Employee"
作为表名,第一个表格为"Employee"
,第二个表格为"Employee1"
,第三个表格为“Employee2”
由于您没有给出任何表名,您的表名将为“Table”,“Table1”,“Table2”...... 您可以将它们映射到正确的名称
adap.TableMappings.Add("Table", "Employee");
adap.TableMappings.Add("Table1", "Shift");
adap.TableMappings.Add("Table2", "Has_Shift");
其余代码将是
adap.Fill(ds);
DataRow newRow = ds.Tables["Employee"].NewRow();
newRow["Name"] = textBox1.Text;
ds.Tables["Employee"].Rows.Add(newRow);
adap.Update(ds);
mycon.Close();