2011-09-28 44 views
0

我正在處理需要將數據從excel表導入到mysql數據庫表的應用程序的一部分。代碼工作正常,直到它到達Excel表格中的某個字符串值被賦予「ABCDE All'John D Doe 999 West Lame Blvd Cullman,AL 35055」的記錄。我不確定,但我相信它必須完全符合那裏出現的「'」。哪一個不能改變,excelsheet中的其他記錄也可以包含「'」......當它到達這個記錄時,它會拋出這個錯誤: 你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本的手冊,在'John D Doe','ABCDE','All'John','D','Doe','256-555-5555',' 」,‘256-555-5555’在行1從excel表導入某些字符串到mysql的問題

代碼,我有解決此問題如下:

 Private Function PerFormUpdate(ByVal customer As String, ByVal bill_to As String, ByVal Contact As String, ByVal Company As String, ByVal firstName As String, ByVal mi As String, ByVal lastname As String, ByVal phone As String, ByVal altPhone As String, ByVal fax As String) 
     Dim _db As New schoolEntities 

     Dim command As MySqlCommand = _dbconn.CreateCommand() 
     command.CommandText = "SELECT * FROM quickbooks_imports WHERE Customer= "" & _customer& "" & Bill_to= "" & _bill_to& "" & Contact= "" & _Company& ""& First_Name= "" & _firstName& "" & M_I= "" & _mi& "" & Last_Name= "" & _lastname& "" & Phone= "" & _phone& "" & Alt_Phone= "" & _altPhone& "" & Fax= "" & _Fax& """ 
     _dbconn.Open() 

     Dim _mysqlReader As MySqlDataReader = command.ExecuteReader() 
     _dbconn.Close() 

     If Not _mysqlReader.HasRows Then 
      Dim _UpdateItem As New quickbooks_imports 
      Dim updateCommand As MySqlCommand = _dbconn.CreateCommand() 

      _UpdateItem.Customer = customer 
      _UpdateItem.Bill_to = bill_to 
      _UpdateItem.Contact = Contact 
      _UpdateItem.Company = Company 
      _UpdateItem.First_Name = firstName 
      _UpdateItem.M_I = mi 
      _UpdateItem.Last_Name = lastname 
      _UpdateItem.Phone = phone 
      _UpdateItem.Alt_Phone = altPhone 
      _UpdateItem.Fax = fax 

      updateCommand.CommandText = "INSERT INTO quickbooks_imports(Customer,Bill_to,Contact,Company,First_Name,M_I,Last_Name,Phone,Alt_Phone,Fax) VALUES ('" & _UpdateItem.Customer & "','" & _UpdateItem.Bill_to & "','" & _UpdateItem.Contact & "','" & _UpdateItem.Company & "','" & _UpdateItem.First_Name & "','" & _UpdateItem.M_I & "','" & _UpdateItem.Last_Name & "','" & _UpdateItem.Phone & "','" & _UpdateItem.Alt_Phone & "','" & _UpdateItem.Fax & "') " 
      _dbconn.Open() 
      updateCommand.ExecuteNonQuery() 

      _db.SaveChanges() 

的誤差上顯示出爲ExecuteNonQuery執行更新..

任何幫助將不勝感激...

根據您的迴應,我切換到PARAMS,這是新的代碼:

  updateCommand.CommandText = "INSERT INTO quickbooks_imports (Customer,Bill_to,Contact,Company,First_Name,M_I,Last_Name,Phone,Alt_Phone,Fax) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" 
      updateCommand.Parameters.AddWithValue("Customer", _UpdateItem.Customer) 
      updateCommand.Parameters.AddWithValue("Bill_to", _UpdateItem.Bill_to) 
      updateCommand.Parameters.AddWithValue("Contact", _UpdateItem.Contact) 
      updateCommand.Parameters.AddWithValue("Company", _UpdateItem.Company) 
      updateCommand.Parameters.AddWithValue("First_Name", _UpdateItem.First_Name) 
      updateCommand.Parameters.AddWithValue("M_I", _UpdateItem.M_I) 
      updateCommand.Parameters.AddWithValue("Last_Name", _UpdateItem.Last_Name) 
      updateCommand.Parameters.AddWithValue("Phone", _UpdateItem.Phone) 
      updateCommand.Parameters.AddWithValue("Alt_Phone", _UpdateItem.Alt_Phone) 
      updateCommand.Parameters.AddWithValue("Fax", _UpdateItem.Fax) 

怎麼過的,現在拋出一個致命異常...

我就像你在你的答覆中提到,代碼如下所示使用名稱參數嘗試:

  Private Function PerFormUpdate(ByVal customer As String, ByVal bill_to As String, ByVal Contact As String, ByVal Company As String, ByVal firstName As String, ByVal mi As String, ByVal lastname As String, ByVal phone As String, ByVal altPhone As String, ByVal fax As String) 
     Dim _db As New schoolEntities 

     Dim command As MySqlCommand = _dbconn.CreateCommand() 
     command.CommandText = "SELECT * FROM quickbooks_imports WHERE Customer= "" & _customer& "" & Bill_to= "" & _bill_to& "" & Contact= "" & _Company& ""& First_Name= "" & _firstName& "" & M_I= "" & _mi& "" & Last_Name= "" & _lastname& "" & Phone= "" & _phone& "" & Alt_Phone= "" & _altPhone& "" & Fax= "" & _Fax& """ 
     _dbconn.Open() 

     Dim _mysqlReader As MySqlDataReader = command.ExecuteReader() 
     _dbconn.Close() 

     If Not _mysqlReader.HasRows Then 
      Dim _UpdateItem As New quickbooks_imports 
      Dim updateCommand As MySqlCommand = _dbconn.CreateCommand() 

      _UpdateItem.Customer = customer 
      _UpdateItem.Bill_to = bill_to 
      _UpdateItem.Contact = Contact 
      _UpdateItem.Company = Company 
      _UpdateItem.First_Name = firstName 
      _UpdateItem.M_I = mi 
      _UpdateItem.Last_Name = lastname 
      _UpdateItem.Phone = phone 
      _UpdateItem.Alt_Phone = altPhone 
      _UpdateItem.Fax = fax 

      updateCommand.CommandText = "INSERT INTO quickbooks_imports (Customer,Bill_to,Contact,Company,First_Name,M_I,Last_Name,Phone,Alt_Phone,Fax) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" 
      updateCommand.Parameters.AddWithValue("@Customer", _UpdateItem.Customer) 
      updateCommand.Parameters.AddWithValue("@Bill_to", _UpdateItem.Bill_to) 
      updateCommand.Parameters.AddWithValue("@Contact", _UpdateItem.Contact) 
      updateCommand.Parameters.AddWithValue("@Company", _UpdateItem.Company) 
      updateCommand.Parameters.AddWithValue("@First_Name", _UpdateItem.First_Name) 
      updateCommand.Parameters.AddWithValue("@M_I", _UpdateItem.M_I) 
      updateCommand.Parameters.AddWithValue("@Last_Name", _UpdateItem.Last_Name) 
      updateCommand.Parameters.AddWithValue("@Phone", _UpdateItem.Phone) 
      updateCommand.Parameters.AddWithValue("@Alt_Phone", _UpdateItem.Alt_Phone) 
      updateCommand.Parameters.AddWithValue("@Fax", _UpdateItem.Fax) 



      'updateCommand.CommandText = "INSERT INTO EXCEL (id,Customer,Bill_to,Contact,Company,First_Name,M_I,Last_Name,Phone,Alt_Phone,Fax) VALUES ('" & _UpdateItem.id & "','" & _UpdateItem.Customer & "','" & _UpdateItem.Bill_to & "','" & _UpdateItem.Contact & "','" & _UpdateItem.Company & "','" & _UpdateItem.First_Name & "','" & _UpdateItem.M_I & "','" & _UpdateItem.Last_Name & "','" & _UpdateItem.Phone & "','" & _UpdateItem.Alt_Phone & "','" & _UpdateItem.Fax & "') ON DUPLICATE KEY UPDATE Customer= '" & _UpdateItem.Customer & "' Bill_to= '" & _UpdateItem.Bill_to & "' Contact= '" & _UpdateItem.Contact & "' Company= '" & _UpdateItem.Company & "' First_Name= '" & _UpdateItem.First_Name & "' M_I= '" & _UpdateItem.M_I & "' Last_Name= '" & _UpdateItem.Last_Name & "' Phone= '" & _UpdateItem.Phone & "' Alt_Phone= '" & _UpdateItem.Alt_Phone & "' Fax= '" & _UpdateItem.Fax & "'" 
      'updateCommand.CommandText = "INSERT INTO quickbooks_imports (Customer,Bill_to,Contact,Company,First_Name,M_I,Last_Name,Phone,Alt_Phone,Fax) VALUES ('" & _UpdateItem.Customer & "','" & _UpdateItem.Bill_to & "','" & _UpdateItem.Contact & "','" & _UpdateItem.Company & "','" & _UpdateItem.First_Name & "','" & _UpdateItem.M_I & "','" & _UpdateItem.Last_Name & "','" & _UpdateItem.Phone & "','" & _UpdateItem.Alt_Phone & "','" & _UpdateItem.Fax & "') " 
      _dbconn.Open() 
      updateCommand.ExecuteNonQuery() 

      _db.SaveChanges() 

和我仍然在updateCommand.ExecuteNonQuery()上遇到致命異常()

命令執行期間遇到致命錯誤。

InnerException消息:「Parameter'?'必須定義。「

+0

這是新代碼: – Skindeep2366

回答

0

您需要使用parameters,這將正確地轉義您的字符串以執行數據庫。

請參閱此鏈接。 http://www.devart.com/dotconnect/mysql/docs/Parameters.html

編輯:嘗試使用命名參數來代替:

updateCommand.CommandText = "INSERT INTO quickbooks_imports (Customer,Bill_to,Contact,Company,First_Name,M_I,Last_Name,Phone,Alt_Phone,Fax) VALUES ("@Customer", "@Bill_to", "@Contact", "@Company", "@First_Name", "@M_I", "@Last_Name", "@Phone", "@Alt_Phone", "@Fax")" 
updateCommand.Parameters.AddWithValue("@Customer", _UpdateItem.Customer) 
updateCommand.Parameters.AddWithValue("@Bill_to", _UpdateItem.Bill_to) 
updateCommand.Parameters.AddWithValue("@Contact", _UpdateItem.Contact) 
updateCommand.Parameters.AddWithValue("@Company", _UpdateItem.Company) 
updateCommand.Parameters.AddWithValue("@First_Name", _UpdateItem.First_Name) 
updateCommand.Parameters.AddWithValue("@M_I", _UpdateItem.M_I) 
updateCommand.Parameters.AddWithValue("@Last_Name", _UpdateItem.Last_Name) 
updateCommand.Parameters.AddWithValue("@Phone", _UpdateItem.Phone) 
updateCommand.Parameters.AddWithValue("@Alt_Phone", _UpdateItem.Alt_Phone) 
updateCommand.Parameters.AddWithValue("@Fax", _UpdateItem.Fax) 
+0

我去那裏,通過材料看,以爲我有正確的,但它現在拋出一個致命異常錯誤說:「參數'?'必須定義。「 – Skindeep2366

+0

嘗試僅使用'Parameters.Add'而不是'Parameters.AddWithValue'。 – Jack

+0

與Parameters.Add它仍然會引發致命的異常,並且VS 2010下劃線Parameters.Add綠色,並說它outdatted使用parameters.addwithvalue ....我已經改變它,雖然參數。添加,仍然得到相同的異常 – Skindeep2366