0

ここで質問を検索しましたが、見つかりませんでした。Microsoft VS 2010 C#を使用しています。

これが私のコードです:

private OleDbConnection myCon;
public Form5()
{
   myCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|ForeignWorkerinfo.accdb");
   InitializeComponent();
}

private void Form5_Load(object sender, EventArgs e)
{
   // TODO: This line of code loads data into the 'foreignWorkerinfoDataSet.FWinFO' table. You can move, or remove it, as needed.
   this.fWinFOTableAdapter.Fill(this.foreignWorkerinfoDataSet.FWinFO);
}

private void button1_Click(object sender, EventArgs e)
{                
   OleDbCommand cmd = new OleDbCommand();
   cmd.Connection = myCon;
   cmd = new OleDbCommand("INSERT INTO [FWinFO] ([ID], [Name], [Gender], [Date of Birth], [Country], [Date of Expire], [Passport No], [Working Place]) VALUES (?, ?, ?, ?, ?, ?, ?, ?);");

   cmd.Parameters.AddWithValue("@id", textBox8.Text);
   cmd.Parameters.AddWithValue("@name", textBox1.Text);
   cmd.Parameters.AddWithValue("@gender", textBox2.Text);
   cmd.Parameters.AddWithValue("@dob", dateTimePicker1.Value);
   cmd.Parameters.AddWithValue("@country", textBox4.Text);
   cmd.Parameters.AddWithValue("@doe", dateTimePicker2.Value);
   cmd.Parameters.AddWithValue("@passport", textBox6.Text);
   cmd.Parameters.AddWithValue("@workplace", textBox7.Text);

   cmd.ExecuteNonQuery();
   myCon.Close();
}

接続プロパティが初期化されていない理由を誰かに教えてもらえますか?

4

3 に答える 3

3

2つのエラーがあります。1つはあなたが述べたもので、もう1つは最初のエラーを修正した後に発生します。

1つ目は、 newを再度呼び出すことにより、のConnectionプロパティの設定を上書きしていることです。cmd新しいものを1つ実行するか、クエリテキストプロパティを設定します。

次のエラーは次のとおりです。

電話myCon.Openをかけるには電話する必要がありExecuteNonQuery()ます。開いていない接続に対してクエリを実行することはできません。

接続が開いているかどうかを確認することで、接続が開いているかどうかをいつでも確認できStateますOpen

ただし、実際にはオンデマンドで接続を作成することをお勧めしますが、それはコードによって異なります。グローバルな共有接続オブジェクトを使用すると、問題が発生する可能性があります。ただし、接続文字列をキャッシュすることはできます。

于 2013-03-06T16:53:50.327 に答える
1

最初に接続を開いてみてくださいmyCon.Open()

于 2013-03-06T16:54:56.710 に答える
1
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = myCon;
cmd = new OleDbCommand("INSERT INTO [FWinFO] ([ID], [Name], [Gender], [Date of Birth], [Country], [Date of Expire], [Passport No], [Working Place]) VALUES (?, ?, ?, ?, ?, ?, ?, ?);");

上記のコードは正しいです。問題は、接続を開いていないことです。使ってください:

 OleDbCommand cmd = new OleDbCommand();
 cmd.Connection = myCon;
 myCon.Open();
 cmd = new OleDbCommand("INSERT INTO [FWinFO] ([ID], [Name], [Gender], [Date of Birth], [Country], [Date of Expire], [Passport No], [Working Place]) VALUES (?, ?, ?, ?, ?, ?, ?, ?);");
于 2013-03-06T16:55:21.757 に答える