0

Visual Studio からデータベースへの接続を作成しています。

これは私のコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;


public partial class CM : System.Web.UI.Page
{
    SqlConnection con = new SqlConnection("server =KIRITI; database =msdb; Integrated Security=True");

protected void Button1_Click(object sender, EventArgs e)
{
    con.Open(); 
    String NotesMaker = TextBox1.Text;
    SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"',con)");
    cmd.ExecuteNonQuery();
    cmd.CommandText = "Select@@Identity";
    con.Close();
}
}

command.Executenonquery() でエラーが発生しました:「System.InvalidOperationException」タイプの例外が System.Data.dll で発生しましたが、ユーザー コードで処理されませんでした

追加情報: ExecuteNonQuery: 接続プロパティが初期化されていません。

助けてください!!2日からブロックしてます!!

4

2 に答える 2

4

connこれは、文字列の連結がクエリの一部になるのを見た最初の場所です。

文字列の引用符を間違えました。ステートメントは次のようになります。

SqlCommand cmd = 
  new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('" + NotesMaker + "'",con);

現在のコードでは、 string を渡している"Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"',con)"ため、接続プロパティが初期化されていないため、例外が発生します。

クエリの作成に文字列連結を使用しないでください。代わりにパラメーターを使用してください。これにより、SQL インジェクションを回避できます。お気に入り:

using(SqlConnection con = new SqlConnection("connectionstring"))
using(SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values(@NotesMaker)",con))
{
    cmd.Parameters.AddWithValue("@NotesMaker", NotesMaker);
    con.Open();
    cmd.ExecuteNonQuery();
} 
于 2013-11-01T18:56:21.940 に答える
1

conのコンストラクターの最初のパラメーターの引用符内に配置SqlCommandすると、の接続プロパティを設定していないため、コードは不平を言っていますSqlCommand

変化する

SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"',con)");

SqlCommand cmd = new SqlCommand("Insert into NOTESMAKER(NOTESMAKER) Values('"+NotesMaker+"')",con);
于 2013-11-01T18:58:45.700 に答える