2017-07-08 8 views
0

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(); 
      } 
     } 
+1

**それをしないでください**。 [パラメータ化されたクエリ](https://msdn.microsoft.com/library/bb738521(v = vs.100).aspx)を代わりに使用してください。 –

+0

私もそれを試しました。 @ Kobyに対する私のコメントによると、それもうまくいきません。理由は分かりませんが、どちらの方法でもバックスラッシュは追加されません。 –

+0

パラメータ化されたクエリでは、バックスラッシュを追加する必要はありません。とにかく、その文字列が不足していても、返り値だけが置き換えられます。しかし、やはりパラメータを使用してください。 –

答えて

0

使用してみてください:

dr[j].ToString().Replace("\"", @"\"); 
+0

私はそれを試み、同じ結果を得る。私は何が起こっているのか分からない。置き換えの結果を変更するものはありません。私も試してみました:.Replace( "\" "、@" x ");しかし、出力SQL文では何も変わりません。 –

関連する問題