weird NullReferenceException error

本文关键字:error NullReferenceException weird | 更新日期: 2023-09-27 18:13:41

我遇到一个奇怪的错误:

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

我不知道为什么会发生这种事。

weird NullReferenceException error

如果使用批处理SQL语句检索多个表并填充在DataSet中,第一个表使用指定的表名命名填充方法。后续表使用指定的名称命名填充方法加上一个从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();