2

テキストボックスとボタンを使用して、SQL Server 2005 にデータ (約 1500 ワード) を保存しています。私はこのコードを使用しています。

protected void Button1_Click(object sender, EventArgs e)
{
    conn.Open();
    String query = String.Format("insert into try (data,sno) values ('{0}',22)",TextBox1.Text);
    SqlCommand cmd = new SqlCommand(query, conn);
    cmd.ExecuteNonQuery();
    Label1.Text = "submitted";
    conn.Close();
}

'data'データ型の列があります'char(4000)'

問題は、最初の段落 (約 1500 語) を保存すると、正常に保存されたことです。しかし、別の段落 (約 1500 語) を保存すると、エラーが表示されます。

「's' 付近の構文が正しくありません。文字列 ',22)' の後の引用符が閉じていません。」

何が問題ですか ??

4

5 に答える 5

7

パラメータを使用

String query = "insert into try (data,sno) values (@data,22)"; 
SqlCommand cmd = new SqlCommand(query, conn); 
cmd.Parameters.AddWithValue("@data", TextBox1.text);
cmd.ExecuteNonQuery(); 

このようにして、テキスト内の一重引用符の存在を心配する必要がなくなり、最も重要なこととして、SqlInjection 攻撃を回避できます。

于 2012-06-15T16:14:13.270 に答える
2

String.FormatSQL ステートメントでの使用に適した入力文字列をエスケープしないため、エラーや重大な脆弱性が発生します。

これに対処するために特別に設計されたパラメータ化されたクエリを使用する必要があります。

于 2012-06-15T16:14:42.817 に答える
1

テキストに'文字が含まれていますか? はいの場合、それはINSERTクエリを壊しています。

次のテキストを挿入しようとすると:

こんにちは

次に、クエリは次のようになります。

insert into try (data,sno) values ('Hello' there,22)

これにより、クエリが正しくなくなります。

これは、セキュリティの問題につながるため、クエリを実行する方法ではありません (詳細: SQL インジェクションを参照)。パラメータ化されたクエリを使用する必要があります。

于 2012-06-15T16:13:17.267 に答える
1

'これは、 に が 1つまたは複数'あるように聞こえますTextBox1.Text。すべての一重引用符を二重引用符に置き換える必要があります。

String query = String.Format("insert into try (data,sno) values ('{0}',22)",Replace(TextBox1.Text,"'","''")); 

ただし、このアプローチでは、SQL インジェクション攻撃を受ける可能性があります。次のようなストアド プロシージャを使用することをお勧めします。

SqlCommand cmd = new SqlCommand(query, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "spInsertDataIntoTry";
cmd.Parameters.AddWithValue("@data", TextBox.Text);
cmd.ExecuteNonQuery();

それ以外の場合は、他の人が言及したようにパラメーターを使用できます。

于 2012-06-15T16:13:29.560 に答える
0

「's' 付近の構文が正しくありません - これは、SQL ステートメントが間違っていることを示しています。入力コンテンツに SQL サーバーのキーワードが含まれている可能性があるため、2 番目の段落に「'」などのキーワードがあるかどうかを確認してください。
例:
2 番目の段落は次のとおりです。 how's the weather? it's cool!!!!!!!!
したがって、SQL ステートメントは: insert into try (data,sno) values ('how's the weather? it's cool!!!!!!!!',22)
it will occur 's' 付近の例外の不正な構文

于 2012-06-15T16:22:38.227 に答える