現在私の教授は、ADO.NETを使用してSQL Serverにデータを保存するケーススタディを実装する必要があります。 SQL Serverでデータベースとテーブルを作成しましたが、C#ADO.NETによってVisual Studioでいくつかのフォームを作成しようとしています。私はYouTubeのビデオに従って書く。しかし、なぜデータをデータベースに正常に保存できないのかわかりません。ADO.NETプログラミングでエラーが発生しました - ExecuteNonQueryにはオープンで利用可能な接続が必要です
結果は次のようになります。
ご協力いただければ幸いです。
namespace casestudy
{
public partial class Form2 : Form
{
SqlConnection vcon2 = new SqlConnection(@"Data Source=SOPHIA-PC\SQLEXPRESS;Initial Catalog=casestudy;Integrated Security=True");
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
try
{
vcon2.Open();
}
catch (Exception ex)
{
MessageBox.Show("error.occured" + ex.Message);
this.Dispose();
}
}
private void button1_Click(object sender, EventArgs e)
{
string vsql = string.Format("insert into Calluser values ({0}, '{1}', '{2}', {3})", Int32.Parse(txtUserID.Text), txtFName.Text, txtLName.Text, Int32.Parse(txtZoneID.Text));
SqlCommand vCom = new SqlCommand(vsql, vcon2);
try
{
vCom.ExecuteNonQuery();
vCom.Dispose();
MessageBox.Show("The User Information stored.");
txtZoneID.Text = "";
txtLName.Text = "";
txtFName.Text = "";
txtUserID.Text = "";
txtUserID.Focus();
}
catch (Exception ex)
{
MessageBox.Show("error.occured" + ex.Message);
this.Dispose();
}
}
}
}
あなたはは、ExecuteNonQueryからの結果で見ることができます。これがOKかどうかを見てください。値を保存したい列名をselect文 – BHuelse
に追加してみてください。1. "late/close early"の原則に従ってください。つまり、クリックイベントハンドラで接続を開いたり閉じたりします。 2.オブジェクトを処分するのは一般的には好ましくない方法です。オブジェクトの「作成者」は廃棄を担当します。あなたの例で、クリックハンドラにエラーがあり、フォームがそれ自身を破棄した後、ユーザがボタンを再びクリックするとどうなりますか? 3.「SQLインジェクション」の記事を参照してください。 ""); go; drop table CallUser;あなたのユーザのタイプが " ? コードは問題なく表示されますが、どのようなエラーメッセージが表示されますか? –