0

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

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

我不知道为什么会这样。

4

1 回答 1

0

如果使用批处理 SQL 语句检索多个表并填充 DataSet,则第一个表将使用为 Fill 方法指定的表名命名。随后的表使用为 Fill 方法指定的名称加上一个从 1 开始并以 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();

因为这里我们"Employee"在 Fill 方法中给出了表名,所以第一个表是"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();
于 2013-05-15T07:11:38.867 回答