查询中的语法错误。函数内部Max语句中的不完整查询子句

时间:2014-04-01 08:35:21

标签: sql vb.net concatenation comma

我想简单地连接到数据库。但问题出现在Sql查询的串联部分。

当我这样做时:

 cmd = New OleDbCommand("Select max(ID) from Table1", con)

没有错误,但是当我这样做时

 cmd = New OleDbCommand("Select max(ID) from'" & tablename & "'", con)

出现vb.net错误:查询中出现语法错误。不完整的查询条款。

这是完整的代码

Function Get_Max(ByVal Get_Table_Name As String)
    Dim tablename As String = Get_Table_Name
    Dim found_max As Integer
    Call connect()
    con.Open()
    cmd = New OleDbCommand("Select max(ID) from'" & tablename & "'", con)
    dr = cmd.ExecuteReader
    While dr.Read
        found_max = dr(0)
    End While
    con.Close()
    MsgBox(found_max)

    Return found_max

End Function

3 个答案:

答案 0 :(得分:3)

不要在变量tablename

周围放置单引号
cmd = New OleDbCommand("Select max(ID) from " & tablename, con)

否则tablename变量变为文字字符串,从数据库的角度来看,您正在请求字符串'Table1'的MAX(ID)。

你应该绝对确定变量tablename的值。

不允许最终用户直接输入此值(至少让他在预定义名称列表中进行选择) 这种代码非常弱,并且对Sql注入开放。

而且,正如其他答案已经概述的那样,如果一个或多个表包含空格或与保留关键字同名,则需要在表名周围放置几个Square括号

cmd = New OleDbCommand("Select max(ID) from [" & tablename & "]", con)

答案 1 :(得分:2)

更改此行

cmd = New OleDbCommand("Select max(ID) from " & tablename & "", con)

到这个

cmd = New OleDbCommand("Select max(ID) from " & tablename, con)

您错过了空格并删除了"'"

答案 2 :(得分:2)

您正在添加其他引号字符。你的初始字符串

cmd = New OleDbCommand("Select max(ID) from'" & tablename & "'", con)

正在评估

cmd = New OleDbCommand("Select max(ID) from'Table1'", con)

相反,您应该使用:

cmd = New OleDbCommand("Select max(ID) from [" & tablename & "]", con)

[]为您提供额外的保护,以防止匹配表名的保留字,尽管不是SQL查询注入,此代码可能仍然容易受到攻击。