将数据库列和值解析为模块中的MySQL语句
我试图通过将表名、列数组、值数组、条件列和值解析为单独模块中的子例程,创建一个动态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
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代码”以进行调试。谢谢