2017-06-27 9 views
1

私はいくつかのデータをMSSQLデータベーステーブルに書き込むためにINSERTを使用しようとしています。私は私のSQL文字列が正しいと信じていますが、command.ExecuteScaler();を実行するとエラーメッセージが表示されます。エラーメッセージをスクリーンショットに添付しました。それは私が間違った構文を使用していると述べていますが、私はコンパイルエラーを取得していません。 私は何か間違っていると仮定しています。C#を使用してMSSQLテーブルにデータを挿入する方法

CODE:

using (SqlConnection connection = new SqlConnection(SQLHelper.CnnCal("CQDB"))) 
{ 
    connection.Open(); 
    String insert = @"INSERT INTO Skills(SkillName, SkillNumber, SkillLastUpdated, SkillServer) VALUES(" + skills.SkillName + "," + skills.SkillNumber + "," + skills.LastUpdated + "," + skills.CallServer +")"; 
    SqlCommand command = new SqlCommand(insert, connection); 
    command.ExecuteScalar(); 
    connection.Close(); 
} 

Error Message from exception pop up

質問: MSSQLデータベースのテーブルにデータを挿入する適切な方法は何ですか?

+0

次のコードは、そのの世話をします。それはSQLインジェクションを防ぎ、あなたの値の引用符とフォーマットを扱います。 – GuidoG

+0

あなたの問題に対する最短かつ簡単な解決策は、すべてのパラメータを引用符で囲んでいるのを忘れてしまったことです。現在INSERT INTO People(Name)VALUES(Flater)のようなクエリを作成していますが、INSERT INTO People(Name)VALUES( 'Flater') 'にする必要があります。しかし、このような答えは、SQLインジェクションを防ぐためにパラメータを使用することが期待されている標準であるため、大幅に下落しています(ただし、すべての正直なところ、あなたの質問に特に関係しないものです。 – Flater

+0

このようなクエリを構築する代わりにパラメータを使用すると、引用符の問題も処理されます。だから私はそれがこの質問の有効なコメントだと思う – GuidoG

答えて

5

をあなたはSQLインジェクションを防ぐためにパラメータを使用する必要があります。あなたはこのようなあなたのクエリを構築する代わりにパラメータを使用する必要があります開始のため

var query = "INSERT INTO Skills(SkillName, SkillNumber, SkillLastUpdated, SkillServer) 
      VALUES (@SkillName, @SkillNumber, @SkillLastUpdated, @SkillServer)"; 

using (SqlConnection connection = new SqlConnection(SQLHelper.CnnCal("CQDB"))) 
{ 
    using(SqlCommand cmd = new SqlCommand(query, connection)) 
    { 
     // add parameters and their values 
     cmd.Parameters.Add(new SqlParameter("SkillName", skills.SkillName)); 
     cmd.Parameters.Add(new SqlParameter("SkillNumber", skills.SkillNumber)); 
     cmd.Parameters.Add(new SqlParameter("SkillLastUpdated", skills.LastUpdated)); 
     cmd.Parameters.Add(new SqlParameter("SkillServer", skills.CallServer 

     cn.Open(); 
     cmd.ExecuteNonQuery(); 
    }  
} 
-2

あなたは、コマンドオブジェクトの接続プロパティを設定するのを忘れ:command.Connection = connection; と:

command.CommandType = CommandType.Text; 
command.CommandText = your_sql_query; 

参照:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.connection(v=vs.110).aspx

+0

接続プロパティは、すでにコンストラクタを介して渡されます。 OPのコードから: 'SqlCommandコマンド=新しいSqlCommand(挿入、接続); ' – Flater

+0

彼はいません。彼は接続を解析する... – FakeCaleb

関連する問題