データベースにデータを追加しようとしていますが、「接続が閉じられていません」という例外メッセージが表示されることがあります。 私はすでにいくつかの解決策の一例 c#接続が閉じられていない、接続の現在の状態が開いている
using (SqlConnection connection = new SqlConnection(connectionString))
{
//etc...
}
を検索しかし、それは動作しません。
はここ
SqlConnection con = new SqlConnection(@"connecting string");
private void btnAdd_Click(object sender, EventArgs e)
{
try
{
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
//cmd.CommandText = " insert into Manipulate values('" + txtICNO.Text + "','" + txtName.Text + "','" + txtDisease.Text + "','" + txtContact.Text + "','" + txtHistory.Text + "','" + txtAddress.Text + "')";
cmd.CommandText = "insert into Manipulate (ICNO,Name,Disease,Contact,History,Address,Gender) values(@ICNO,@Name,@Disease,@Contact,@History,@Address,@Gender)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@ICNO", txtICNO.Text);
cmd.Parameters.AddWithValue("@Name", txtName.Text);
cmd.Parameters.AddWithValue("@Disease", txtDisease.Text);
cmd.Parameters.AddWithValue("@Contact", txtContact.Text);
cmd.Parameters.AddWithValue("@History", txtHistory.Text);
cmd.Parameters.AddWithValue("@Address", txtAddress.Text);
if (rdbMale.Checked)
cmd.Parameters.AddWithValue("@gender", "Male");
else
cmd.Parameters.AddWithValue("@gender", "Female");
cmd.ExecuteNonQuery();
displayData();
MessageBox.Show("record add successfully");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
con.Close();
}
}
ここで例外/エラーが発生していますか? – maccettura
'using()'は動作し、接続を安全に処理/終了するための推奨される方法です。 *実際のコードと、その呼び出しスタックを含む完全な例外文字列を送信します。これにより、例外が実際に発生した場所が示されます。これは 'Exception.ToString()'で簡単に得ることができます。私は、あなたのコードがグローバル接続を使い、それを正しく閉じるのを忘れているか、 'displayData()'が接続自体を開こうとしていると思います。 –
'displayData()はINSERT文の後にデータをリフレッシュするために同じ接続を使用しようとしていますか? *接続フィールドを使用する代わりに、接続を 'displayData'のパラメータ、つまり' displayData(con) 'に渡します。あなたは同じことを読むために2つの接続を開くことを避けるこのように –