「 '」を使用すると挿入に失敗します。文字列の例:彼は男の子です。エスケープ記号を使用して「 '」をスキップしようとしましたが、これは正しい方法ではないと思います。
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();
「 '」を「 `」に置き換えるオプションがありましたが、これにより、dbのテキストも変更されます。同じように「 '」を保持し、dbにも挿入したいと思います。
試してみる
string sql= "insert into gtable (1text, 1memo) " +
"values ('" + textBox3.Text.Replace("'", "''") + "', null)";
これを試して
string sql= "insert into gtable (1text,1memo) values (@col1,NULL)";
OleDbCommand cmd = new OleDbCommand(sql, con);
cmd.Parameters.AddWithValue("@col1",textBox3.Text);
con.Open();
データベースに一重引用符を挿入するには、'
を''
に置き換えます。データベースでは、一重引用符のみが使用されます。
これを使って
string sql= "insert into gtable (1text,1memo) values ('"
+ textBox3.Text.Replace("'", "''") + "', null)";
残りのコードは同じです。
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);