Невозможно перенести данные из Ms Access в MySQL, используя c # «Ошибка синтаксиса SQL в строке 1» - PullRequest
0 голосов
/ 07 марта 2019

Я пытался разрешить это исключение в течение нескольких дней, но найти его мне не повезло. В настоящее время я пытаюсь перенести данные из MS Access в MySQL, используя приложение C #

В этой строке появляется следующая ошибка

myCmd.ExecuteNonQuery();

за исключением того, что

"У вас ошибка в синтаксисе SQL, найдите правильный синтаксис для использования около 'V REG. 5V, 0.5A ',' ',' Yusuf ',' ',' '), (' QFN ',' N230285000 ',' Component ',' 80 ',' Storage 'в строке 1 "

Ниже приведен код, где произошла ошибка. Любой совет будет принята с благодарностью

private void InsertDatatoTable(DataTable dt_Tbl)
    {
        MySqlConnection mConnection = null;
        try
        {
            string currenttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");                
            StringBuilder sCommand = new StringBuilder("REPLACE INTO `inventorysystem` (`Product_Name`,`Product_ID`,`Product_Category`,`Quantity`,`Location`,`Manufacturer`,`Project _Name`,`Description`,`MinQuantity`,`Owner`,`QR_Code`,`Color_Type`) VALUES ");
            using (mConnection = new MySqlConnection(ConfigurationManager.ConnectionStrings["Data_store"].ToString()))  
            {
                List<string> Rows = new List<string>();

                for (int i = 0; i < dt_Tbl.Rows.Count; i++)
                {
                    Rows.Add(string.Format("('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}')", dt_Tbl.Rows[i][0].ToString(), dt_Tbl.Rows[i][1].ToString(), dt_Tbl.Rows[i][2].ToString(), dt_Tbl.Rows[i][3].ToString(), dt_Tbl.Rows[i][4].ToString(), dt_Tbl.Rows[i][5].ToString(),
                        dt_Tbl.Rows[i][6].ToString(), dt_Tbl.Rows[i][7].ToString(), dt_Tbl.Rows[i][8].ToString(), dt_Tbl.Rows[i][9].ToString(), dt_Tbl.Rows[i][10].ToString(), dt_Tbl.Rows[i][11].ToString(), currenttime));
                }
                sCommand.Append(string.Join(",", Rows));
                sCommand.Append(";");
                mConnection.Open();
                using (MySqlCommand myCmd = new MySqlCommand(sCommand.ToString(), mConnection))
                {
                    myCmd.CommandType = CommandType.Text;
                    myCmd.ExecuteNonQuery();
                }

1 Ответ

0 голосов
/ 08 марта 2019

Комментарий подтверждает подозрение, о котором я хотел спросить. Данные, содержащие апострофы (O'Hare) или кавычки (sand at 5" depth), приведут к сбою оператора SQL-запроса, созданного в коде. Это не совсем проблема C #. Операторы запросов, построенные на любом языке, будут иметь дело с этим. В VBA используется функция Replace, чтобы удвоить апостроф, который заставляет движок SQL обрабатывать как фактический текст, а не специальный символ (известный как «экранирующий» специальный символ). Пример:

strSQL = "INSERT INTO tablename(fieldname) VALUES('" & Replace(Me.tbxLName, "'", "''") & "')"

Символ кавычки хитрее. Настолько сложно, что когда я впервые столкнулся с этой проблемой, я сдался и дал указание своим пользователям не использовать кавычки. С тех пор я научился справляться.

Replace(Me.tbxComment, Chr(34), Chr(34) & Chr(34))

Я предполагаю, что в C # будет аналогичная функциональность.

...