-2

私は、SQL サーバーで c# を使用することにかなり慣れています。単純なステートメントでデータの挿入に失敗する理由がわかりません。私のコードは次のとおりです。

 query = "INSERT INTO MCDPhoneNumber ([MCDID],[PhoneNumber])" +
                    "VALUES("+maxid+", '"+tel+"')";
 SqlConnection conn = new SqlConnection("Data Source=source; ...");
 SqlCommand newCommand = new SqlCommand(query, conn);

 int success= myCommand.ExecuteNonQuery();
 if (success!= 1)
 {
      MessageBox.Show("It didn't insert anything:" + query);
 }

まず最初に、データにパラメーターを使用する必要があることを知っていて、最初はそうしましたが、失敗したときに単純なクエリを試してみましたが、それでも失敗します。さらに、別のテーブルの直前に同様の挿入があり、それが機能することがわかります。さらにおもしろいのは、SQL Server Management Studio にクエリをコピーして貼り付けると、それが機能することです。また、処理中のエラーも報告されません。

4

2 に答える 2

2

まず、コマンドを次のように定義しますnewCommandが、myCommand.

SQLクエリには常に使用する必要があります。parameterized queriesこの種の文字列連結は、SQL Injection攻撃に対して無防備です。

 query = "INSERT INTO MCDPhoneNumber (MCDID, PhoneNumber) VALUES(@maxid, @tel)";
 using(SqlConnection conn = new SqlConnection("Data Source=source; Initial Catalog=base; Integrated Security = true"))
 {
    SqlCommand newCommand = new SqlCommand(query, conn);
    conn.Open();
    newCommand.Parameters.AddWithValue("@maxid", maxid);
    newCommand.Parameters.AddWithValue("@tel", tel);

    int success= newCommand.ExecuteNonQuery();
    if (success != 1)
    {
         MessageBox.Show("It didn't insert shit:" + query);
    }
 }

そして、エラーメッセージについてもっと礼儀正しくしてください:)

于 2013-09-25T14:05:43.353 に答える
2

====================== 編集 ========================== ====

古いコマンド オブジェクト (つまり myCommand) を使用する場合は、新しいコマンド (newCommand) を作成する代わりに、次のコードを使用します。

 myCommand.CommandText = query;
 myCommand.CommandType = System.Data.CommandType.Text;

そして、それを実行します

query をnewCommandにバインドし、 myCommandを実行しています。

====================== 編集 ========================== ====

SqlCommand newCommand = new SqlCommand(query, conn);

ここで、SQLCOMMAND オブジェクトのnewCommandを定義しました

 int success= myCommand.ExecuteNonQuery();

そして、あなたはmyCommandとしてアクセスしています

さらに、接続を開いていないと思います

于 2013-09-25T13:57:27.523 に答える