2013-02-08 81 views
2

創建一個將數據從Microsoft SQL Server移動到MySQL的vb.net應用程序。我的所有插入函數都工作到目前爲止,除了以下。看起來問題在於文本中帶有逗號的字段導致問題。vb.net在字段中用逗號在字段中插入錯誤

我認爲這個問題是與「分類」列相關的。它具有像'11 | 0,1 | 0,12 | 0'的值。

是否需要用特殊方式處理逗號?

錯誤: SQL錯誤:MySql.Data.MySqlClient.MySqlException:您在您的SQL語法中有錯誤;檢查對應於你的MySQL服務器版本使用附近的 '分離,C_ID,EntryDt,S_ID)VALUES(1,1455090,'11 | 0,1' 正確的語法手冊第1行

代碼:

#Region " InsertTable_Activity " 
    Function InsertTable_Activity(ByVal Activity_ID As Integer, _ 
     ByVal Categories As String, _ 
     ByVal Separator As String, _ 
     ByVal C_ID As Integer, _ 
     ByVal EntryDt As DateTime, _ 
     ByVal S_ID As Integer, _ 
     ByVal myCon As MySqlConnection) As String 

     Dim sRetVal As String = "" 
     Dim sSQL As String = "INSERT INTO CandidateInsertResumeDetailCategories_Activity (Activity_ID,Categories,Separator,C_ID,EntryDt,S_ID) VALUES (?Activity_ID, ?Categories, ?Separator, ?C_ID,?EntryDt,?S_ID)" 
     Dim myCmd As MySqlCommand = New MySqlCommand(sSQL, myCon) 
     myCmd.CommandType = Data.CommandType.Text 
     myCmd.Parameters.Add(New MySqlParameter("?Activity_ID", MySqlDbType.Int32)).Value = Activity_ID 
     myCmd.Parameters.Add(New MySqlParameter("?Categories", MySqlDbType.VarChar, 500)).Value = Categories 
     myCmd.Parameters.Add(New MySqlParameter("?Separator", MySqlDbType.VarChar, 10)).Value = Separator 
     myCmd.Parameters.Add(New MySqlParameter("?C_ID", MySqlDbType.Int32)).Value = C_ID 
     myCmd.Parameters.Add(New MySqlParameter("?EntryDt", MySqlDbType.DateTime)).Value = EntryDt 
     myCmd.Parameters.Add(New MySqlParameter("?S_ID", MySqlDbType.Int32)).Value = S_ID 

     Try 
      If myCon.State <> Data.ConnectionState.Open Then 
       myCon.Open() 
      End If 

      myCmd.ExecuteNonQuery() 
      myCmd.Dispose() 

     Catch sqlEx As MySqlException 
      sRetVal = "ERROR: Sql error: " & sqlEx.ToString & vbCrLf & " - SQL used: " & sSQL 
     Catch ex As Exception 
      sRetVal = "ERROR: Regular error: " & ex.ToString & vbCrLf & " - SQL used: " & sSQL 
     Finally 
     End Try 

     Return sRetVal 
    End Function 
#End Region 

回答

2

SEPARATOR是保留關鍵字,你應該用反引號逃避它,

INSERT INTO CandidateInsertResumeDetailCategories_Activity 
      (Activity_ID, Categories, `Separator`, C_ID, EntryDt, S_ID) 
VALUES ..... 

另一種建議是不要使用保留關鍵字列表中的任何名稱

+0

謝謝JW。現在工作。 – lleemon 2013-02-08 15:33:13

+0

不客氣':D' – 2013-02-08 15:33:52