MySqlデータベースに挿入するために、インポートしているExcelスプレッドシートです。ここでは、スプレッドシート内の1つのレコードがあります:MySqlの挿入文のエスケープとしてC#でバックスラッシュを追加しようとしています
Loc Item Description
FAB12 0121G00667PDG PNL DUCT 27.5"
私はDataTable
を取得するためにOleDbDataReader
を使用していますし、それが働いています。私が抱えている問題は、を\"
に置き換えるときに、MySqlが二重引用符を受け入れるようにしようとするときです。私はC#を変更しようとしています27.5"
に27.5\"
ご協力いただきありがとうございます。ここで
INSERT INTO test_table2 (Loc, Item, Description) VALUES ("FAB12
","0121G00667PDG","PNL DUCT 27.5"")
をコードです:
は、ここで私は今取得していた結果だ
for (int i = 0; i < dtSheet.Rows.Count; i++)
{
DataRow dr = dtSheet.Rows[i];
for (int j = 0; j < dtSheet.Columns.Count; j++)
{
DataColumn dc = dtSheet.Columns[j];
if (dr[j].ToString().Contains("\""))
{
Console.WriteLine(dr[j].ToString());
dr[j].ToString().Replace("\"", "\\\"");
//need the backslash for mysql to escape "
//so trying to get "PNL DUCT 27.5\""
Console.WriteLine(dr[j].ToString());
}
はここマジッドあたりなどの修正です。プリペアドステートメントを使用すると、二重引用符をMySqlに挿入することができました。 try { conn.Open(); cmd.Connection = conn;
cmd.CommandText = "INSERT INTO test_table2 (Loc, Item, Description) VALUES(@Loc, @Item, @Desc)";
cmd.Prepare();
cmd.Parameters.AddWithValue("@Loc", "Loc");
cmd.Parameters.AddWithValue("@Item", "Item");
cmd.Parameters.AddWithValue("@Desc", "Desc");
foreach (DataRow row in dtSheet.Rows)
{
cmd.Parameters["@Loc"].Value = row[0];
cmd.Parameters["@Item"].Value = row[1];
cmd.Parameters["@Desc"].Value = row[2];
Console.WriteLine(cmd.ToString());
cmd.ExecuteNonQuery();
}
}
**それをしないでください**。 [パラメータ化されたクエリ](https://msdn.microsoft.com/library/bb738521(v = vs.100).aspx)を代わりに使用してください。 –
私もそれを試しました。 @ Kobyに対する私のコメントによると、それもうまくいきません。理由は分かりませんが、どちらの方法でもバックスラッシュは追加されません。 –
パラメータ化されたクエリでは、バックスラッシュを追加する必要はありません。とにかく、その文字列が不足していても、返り値だけが置き換えられます。しかし、やはりパラメータを使用してください。 –