0

アポストロフィを保存するのを手伝ってください。Webサイト(C#、. net、SQL Server)を作成していて、ユーザーにメッセージボックスを表示したいのですが、問題は、などのメッセージを挿入するとJohn's、の近くにエラーが表示されること''s'です。

アポストロフィをデータベースに保存する方法を教えてください

を使用しましたがnvarcharvarcharメッセージを含むアポストロフィを保存できませんでした。

一般的な解決策は二重アポストロフィでメッセージを書くことですが、これはWebサイトの解決策ではありません

4

4 に答える 4

4

あなたはSQL-Injectionに対してオープンです。文字列を連結してクエリを作成しないでください。代わりに を使用しますSQL-Parameters。これにより、コードが読みやすくなり、あなたのようなエラーが防止されます。

次に例を示します。

int amt;  
using (var con = new SqlConnection(ConnectionString)) {
    var sql = "INSERT INTO dbo.Message(UserID, Message) VALUES(@UserID, @Message);";
    using (var cmd = new SqlCommand(sql, con)) {
        cmd.Parameters.AddWithValue("@UserID", userID); // passed as argument
        cmd.Parameters.AddWithValue("@Message", txtMessage.Text); // f.e. "John's"
        con.Open();
        int inserted = cmd.ExecuteNonQuery();
    }
}

同じことが、他の sql のようなUPDATEコマンドでも機能します。

于 2012-11-11T14:55:56.917 に答える
1

問題は、別のアポストロフィでアポストロフィをエスケープする必要があることです。

たとえば、http://sqlfiddle.com/#!3/d2f75/1 をご覧ください。

CREATE TABLE tblTEst( col1 NVARCHAR(50))

INSERT INTO tblTest
  (Col1)
SELECT 'John''s'
于 2012-11-11T14:55:44.340 に答える
1

最善の解決策は、SQL にプレースホルダーのみが含まれ、別のメソッドを介して実際の値を渡す準備済みステートメント (または C# で同等のもの) を使用することです。

文字リテラルでは、一重引用符'を二重にするだけで使用できます。

insert into foo (bar)
values
('John''s');
于 2012-11-11T14:55:56.047 に答える
0

このようにジョンsのCHAR(39)間で使用します :'john'+CHAR(39)+'s'

于 2012-11-11T14:52:03.247 に答える