2016-03-08 144 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