奇怪的NullReferenceException错误

时间:2013-05-15 06:44:20

标签: c# nullreferenceexception

我遇到了一个奇怪的错误:

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行的对象实例。

我不知道为什么会这样。

1 个答案:

答案 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();