30

"'" を使用すると挿入に失敗します。文字列の例: He's is a boy. エスケープ記号を使用して「'」をスキップしようとしましたが、これは正しい方法ではないと思います。

textBox3.Text.Replace("'", " \'");
string sql= "insert into gtable (1text,1memo) values ('"+textBox3.Text+"',null)";
        OleDbCommand cmd = new OleDbCommand(sql, con);

        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

「'」を「`」に置き換えるオプションがありましたが、これによりデータベース内のテキストも変更されます。「'」をそのまま保持し、データベースにも挿入したいと思います。

4

5 に答える 5

56

これを試して

    string sql= "insert into gtable (1text,1memo) values (@col1,NULL)";
    OleDbCommand cmd = new OleDbCommand(sql, con);
    cmd.Parameters.AddWithValue("@col1",textBox3.Text);
    con.Open();
于 2012-08-11T06:14:45.007 に答える
47

試す

string sql= "insert into gtable (1text, 1memo) " + 
            "values ('" + textBox3.Text.Replace("'", "''") + "', null)";
于 2012-08-11T06:12:44.857 に答える
8

データベースに一重引用符を挿入するには'''. データベースでは、一重引用符のみが使用されます。

これを使って

string sql= "insert into gtable (1text,1memo) values ('" 
            + textBox3.Text.Replace("'", "''") + "', null)";

残りのコードは同じです。

于 2012-08-11T06:13:26.007 に答える
2

String.Replaceに関する MSDN の記事には、次のように書かれています。

現在の文字列内の指定された Unicode 文字または文字列のすべての出現箇所が別の指定された Unicode 文字または文字列に置き換えられた新しい文字列を返します。

最初の行では、textBox3.Text の値をそのメソッド呼び出しの結果に割り当てていません。つまり、何も起こらないということです。

さらに、SQL Server で引用符をエスケープするには、2 つの単一引用符を使用するだけです (注: 二重引用符と同じではありません)。

これにより、期待される結果が得られるはずです。

textBox3.Text = textBox3.Text.Replace("'", "''");

さらに、文字列連結のニーズについてString.Formatを調べることもできます。

String escapedInput = textBox3.Text.Replace("'", "''");
String sql = String.Format("insert into gtable (1text,1memo) values ('{0}',null)", escapedInput);
于 2012-08-11T06:26:24.617 に答える