-1

現時点では、SQL Server データベースに 3 つの値を入力しようとしていますが、C# プログラムでハードコーディングしています。

私のデータベースには、次の4つの列があります。

  • RowID(これはデータベースによって自動的に更新されるはずです)
  • Name(文字列として格納)
  • Score(整数)
  • Accuracy(浮く)

私のコードでは、次のコード行でこれらを埋めようとしています:

 using (SqlConnection connection = new SqlConnection(DBConnection))
 {
            string name = "John";
            int score = 123;
            float Accuracy = 20.0f;

            SqlCommand command = new SqlCommand("INSERT INTO HighScoreTable(Name, Score, Accuracy) VALUES("  + name + " , " + score + " , " + Accuracy + ")", connection);
            command.Connection.Open();
            command.ExecuteNonQuery();
        }

しかし、プログラムを実行すると、Visual Studio が強調表示されます

command.ExecuteNonQuery() 

「John」は有効な列ではありません。

これで何か間違っていますか?

4

7 に答える 7

2

これを行う正しい方法は次のとおりです。

using (SqlConnection connection = new SqlConnection(DBConnection))
{
    string name = "John";
    int score = 123;
    float Accuracy = 20.0f;

    using (SqlCommand command = new SqlCommand("INSERT INTO HighScoreTable(Name, Score, Accuracy) VALUES(@name, @score, @accuracy)", connection);
    {
        command.Parameters.AddWithValue("@name", name);
        command.Parameters.AddWithValue("@score", score);
        command.Parameters.AddWithValue("@accuracy", accuracy);

        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}

パラメータ化されたクエリを使用する場合、一重引用符を気にする必要はないことに注意してください!! 文字列パラメーターは一重引用符で囲まれていません。すべてフレームワークによって行われます。

于 2013-04-10T09:24:23.720 に答える
1

この種の問題には、パラメーター化されたクエリを使用します。

using (SqlConnection connection = new SqlConnection(DBConnection))
        {
            string name = "John";
            int score = 123;
            float Accuracy = 20.0f;

            SqlCommand command = new SqlCommand("INSERT INTO HighScoreTable(Name, Score, Accuracy) VALUES(@name,@score,@accuracy)", connection);

               SqlParameter name= new SqlParameter("@name", name);
                name.Value = name;
                command.Parameters.Add(name);
               .
               . 
               .
            command.Connection.Open();
            command.ExecuteNonQuery();
        }

このようにして、列の混乱を避けることができるようにパラメーターを追加できます。

于 2013-04-10T09:24:55.880 に答える
0

John は文字列であるため、John の両側に ' を追加して、データベースにそのことを知らせる必要があります。

だから...VALUES(" + name + " , "...に変更...VALUES('" + name + "' , "...

どちらの側にも ' を付けずに単に John と書くと、データベースは列を参照していると見なし、エラー メッセージが示すように、データベースは という列について何も認識しませんJohn

于 2013-04-10T09:20:42.730 に答える
0

適切に動作させるためにこれを行うだけです

SqlCommand command = new SqlCommand("INSERT INTO 
      HighScoreTable(Name, Score, Accuracy) 
               VALUES('"  + name + "' , " + score + " , " + Accuracy + ")", connection);

名前は文字列値なので、'このように装飾するだけ'" + name + "'です.SQLサーバーでは、文字列が装飾されていない'場合、エラーが発生します

現在、文字列値は次のSQLクエリに変換されますshichは無効です

      INSERT INTO 
      HighScoreTable(Name, Score, Accuracy) 
               VALUES(John , 123 , 20.0f)

この間違いを避けるには、SQLParameter を使用します。つまり、クエリを prameterize します。

于 2013-04-10T09:20:50.987 に答える