2017-05-08 24 views
0
string sql = "Insert Into mytable" + $" (Id, Name, otherName) Values" + 
      $" ('{id}','{name}','{otherName}')"; 
using (SqlCommand cmd = new SqlCommand(sql, sqlConnection)) 
     { 
      cmd.ExecuteNonQuery(); 
     } 

私のデータの一部は次のようなものがあります。「otherName」列に「Mike's car」のようなものがあります。 SQLサーバーは "s"にエラーを表示しますが、これは自分のコードを修正する方法を知りません。Microsoft SQL Server:INSERT to table with 's

ありがとうございます。私の悪い英語を申し訳ありません。

+0

代わりにマイクのcar'試し 'マイク"のcar' 2つの単一引用符 'の。代わりに、パラメータ化クエリを使用する必要があります。 –

+2

[C#でSqlCommand Prepareを使用する際の長所と短所]の可能な複製?(http://stackoverflow.com/questions/2449827/pros-and-cons-of-using-sqlcommand-prepare-in-c) –

+0

ありがとう応答は、私がやっていることは、私はそれを制御していないソースからデータを解析しています。だから、私はコードでそれを修正する方法を理解する必要があります。ところで、そのようにパラメータ化する方法は? – maxrena

答えて

2

あなたはSQLインジェクション攻撃に開い自分を残している、パラメータを使用する必要があります。

// These come from whatever your source which you have no control over. 
int id = 12345; 
string name = "Andrew"; 
string otherName = "Fred"; 

var sql = "Insert Into mytable (Id, Name, otherName) Values (@id, @name, @otherName) 
using (var sqlQuery = new SqlCommand(sql, sqlConnection)) 
{ 

    sqlQuery.Parameters.AddWithValue("@id", id); 
    sqlQuery.Parameters.AddWithValue("@name", name); 
    sqlQuery.Parameters.AddWithValue("@otherName", otherName); 

    sqlQuery.ExecuteNonQuery(); 
} 
+1

これは正解の理由を追加したかっただけです。パラメータはSQLコマンドを破る値がないように正しく(エスケープ)値を処理する方法を知っています。 –

+0

ありがとう、私はあなたの助けに感謝します。 – maxrena