Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据库列和值解析为模块中的MySQL语句_Mysql_Vb.net - Fatal编程技术网

将数据库列和值解析为模块中的MySQL语句

将数据库列和值解析为模块中的MySQL语句,mysql,vb.net,Mysql,Vb.net,我试图通过将表名、列数组、值数组、条件列和值解析为单独模块中的子例程,创建一个动态MySQLINSERT INTO…WHERE NOT EXIST语句,但我一直遇到列计数与第1行的值计数不匹配的错误。代码如下: Sub InsertRecord(ByVal tbl As String, ByVal cols() As String, ByVal params() As String, _ ByVal colCondition As String, By

我试图通过将表名、列数组、值数组、条件列和值解析为单独模块中的子例程,创建一个动态MySQL
INSERT INTO…WHERE NOT EXIST
语句,但我一直遇到
列计数与第1行的值计数不匹配的错误。代码如下:

Sub InsertRecord(ByVal tbl As String, ByVal cols() As String, ByVal params() As String, _
                      ByVal colCondition As String, ByVal paramCondition As String) 'As String

    'Create new string of columns
    Dim myCols As String = ""
    For Each col As String In cols
        myCols &= col & ", "
    Next

    Dim newCols As String = myCols.Remove(myCols.Count - 2, 2)
    MsgBox(newCols)
    Dim scols As String = newCols.Insert(0, "`").Replace(", ", "`, `") & "`"
    MsgBox(scols)



    'Create new string of parameters
    Dim myParams As String = ""
    For Each param In params
        myParams &= param & ", "
    Next

    Dim newParams As String = myParams.Remove(myParams.Count - 2, 2)
    MsgBox(newParams)
    Dim sparams As String = newParams.Insert(0, "'").Replace(", ", "', '") & "'"
    MsgBox(sparams)
    'End


    Dim p As String = paramCondition.Insert(0, "'") & "'"



    'Try
    'Dim insRemarks As String = "done"
    con = New MySqlConnection("Server=localhost; Database=etms; Uid=root; Pwd=;")
    comA = New MySqlCommand

    'INSERT NEW RECORD.
    'THIS GIVES THE ERROR
    comA.CommandText = "INSERT INTO " & tbl & " (" & scols & ") SELECT * FROM (SELECT @params) AS tmp "
    comA.CommandText &= "WHERE NOT EXISTS (SELECT " & colCondition & " FROM " & tbl & " WHERE " & colCondition & " = @param) limit 1"
    comA.Parameters.AddWithValue("@param", p)
    comA.Parameters.AddWithValue("@params", sparams)



    'THIS STATIC CODE WORKS FINE.
    'comA.CommandText = "INSERT INTO state (`st_state`, `ctry_Id`) SELECT * FROM (SELECT 'a', '1') AS tmp "
    'comA.CommandText &= "WHERE NOT EXISTS (SELECT st_state FROM state WHERE st_state = 'a') limit 1"



    comA.Connection = con

    con.Open()
    comA.ExecuteNonQuery()
    con.Close()

    'Release used up components
    comA.Parameters.Clear()
    comA.Dispose()
    comA = Nothing
    con = Nothing

    MsgBox("done.")

    'Return insRemarks

    'Catch ex As Exception
    'MsgBox(ex.Message.ToString & vbCrLf & vbCrLf & comA.CommandText.ToString)
    'Return "Error"
    'End Try

End Sub
如图所示,我尝试了很多排列(引入倒引号),但都无济于事


如果有人能帮忙,我会很高兴。

我认为SELECT子句中的绑定参数在MySQL中是无效的:
(SELECT@params)
@Alex B。哦,好的。我不太确定。我觉得我做错了什么。稍后我将分享一些快照。谢谢你的意见。听起来很像你的problem@Plutonix谢谢你。我刚看过,你的方法绝对有道理。我将实施并返回给您。@puropoix VS下划线
GetFullCommandSQL(comA)
作为错误。我错过了什么?我真的希望自己能够显示完整的“sql代码”以进行调试。谢谢