2016-03-08 34 views
-1

請我急需您的幫助。我有以下代碼根據用戶的輸入從數據網格視圖中顯示的ms訪問中返回一個表。但是當我試圖運行它時,我遇到了查詢表達式'lastname ='',firstname ='',midname ='''。「中的語法錯誤(逗號)錯誤。請別人幫我語法錯誤:查詢中的逗號訪問表達式SQL語句

這是我的代碼。

Dim sql As String = "SELECT `lastname` as 'FAMILY NAME',`firstname` as 'NAME', `midname` AS 'MIDDLE NAME', `sex` as 'SEX', `birthdate` as 'BIRTHDAY', `Address` as 'ADDRESS', `barangay` AS 'BARANGAY', `patientID` AS 'PID' FROM `tblinformation_offline` WHERE lastname = '" & TextBox1.Text & "' , firstname = '" & TextBox3.Text & "' , midname = '" & TextBox4.Text & "' " 
     Dim cn As New OleDbConnection(constring) 
     cn.Open() 
     Dim da As New OleDbDataAdapter(sql, cn) 
     Dim ds As New DataSet 
     da.Fill(ds, "AccessData") 
     cn.Close() 
     With Me.DataGridView1 
      .DataSource = ds 
      .DataMember = "AccessData" 
     End With 
     ds = Nothing 
     da.Dispose() 
     cn = Nothing 
+1

很多問題在這裏。但是我會開始檢查你如何編寫一個WHERE子句。檢查你的數據庫手冊(或任何SQL在線教程) – Steve

+1

什麼是數據庫,訪問或MySQL - 它們是兩個完全不同的東西。您應該使用SQL參數,而不是連接查詢的字符串。希望沒有人被命名爲'D'Artagnan'或'O'Brien' – Plutonix

+0

@Steve WHERE子句是如何錯誤的? –

回答

1

第一個問題,WHERE子句是由邏輯運算符(如AND或OR)連接在一起的一個或多個條件。您的WHERE列表中有一系列值,這不是有效的語法

.... FROM `tblinformation_offline` 
    WHERE lastname = 'xxxxx' 
    AND firstname = 'yyyyyy' 
    AND midname = 'zzzzz" 

這將解決您的直接錯誤。
正如你所看到的,我已經刪除了字符串連接,以便更清楚地看到你的錯誤,但是現在存在使用字符串連接來構建sql查詢的問題。不要做,而是使用參數化查詢

在您使用的MySqlCommand的參數集合參數化查詢來傳遞自己的價值觀,同時包含文本字符串充滿參數的佔位符

Dim sql As String = "SELECT ...... FROM `tblinformation_offline` " & _ 
     "WHERE lastname = @lname AND firstname = @fname AND midname = @mname" 
Using cn As New OleDbConnection(constring) 
Using da As New OleDbDataAdapter(sql, cn) 
    da.SelectCommand.Parameters.Add("@lname", MySqlDbType.VarChar).Value = TextBox1.Text 
    da.SelectCommand.Parameters.Add("@fname", MySqlDbType.VarChar).Value = TextBox3.Text 
    da.SelectCommand.Parameters.Add("@mname", MySqlDbType.VarChar).Value = TextBox4.Text 
    Dim ds As New DataSet 
    da.Fill(ds, "AccessData") 
    cn.Close() 
    With Me.DataGridView1 
     .DataSource = ds 
     .DataMember = "AccessData" 
    End With 
    ds = Nothing 
End Using 
End Using 

最後在使用的查詢文本中出現錯誤。當你寫

"SELECT `lastname` as 'FAMILY NAME' .... 

要創建記錄,其中列姓氏的價值充滿了字符串「姓」的,因爲您使用單引號字符,而不是反引號的,你做的列左右(同也適用於其他列)

+0

爲什麼Select中的字段有' – codeMonger123

+0

omg。這是固定的。感謝您的幫助!!! –

+0

@ codeMonger123反引號字符被MySql用作列和表名稱周圍的分隔符。 (與Sql Server中的方括號一樣)它們在這裏並不是真正需要的,因爲這些列有一個標準名稱,而不是混淆名稱,但別名包含空格。這裏反引號需要 – Steve