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"2 番目のテーブル"Employee1"、3 番目のテーブルが「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 に答える