【发布时间】:2021-10-31 02:14:27
【问题描述】:
我正在尝试使用 vb.net 中的类在 mariadb 存储过程中插入数据,但我不断收到错误消息,提示 PROCEDURE 的参数数量不正确 ... 预期为 12。但 0 什么这是什么意思?我该如何解决这个错误?我在我的代码中遗漏了什么吗?
注意:数据库连接没有问题
Try
Dim arrParameter, arrParamName
Dim sParamName As String
Dim sDataValue As String
Dim sDataTypes As String
Dim lCtr As Long
Dim param(lParameter) As MySqlParameter
Dim cmd As New MySqlCommand()
cmd.Connection = conn
cmd.CommandText = sStoreProcName
cmd.CommandType = CommandType.StoredProcedure
InsertUpdateData = False
cmd = New MySqlCommand(sStoreProcName, conn)
arrParameter = Split(sParameterList, "|", , vbTextCompare)
If Not Trim(sParameterList) = "" Then
If UBound(arrParameter) >= 0 And IsArray(arrParameter) Then
For lCtr = 0 To UBound(arrParameter)
arrParamName = Split(arrParameter(lCtr), "$", , vbTextCompare)
sParamName = arrParamName(0)
sDataTypes = arrParamName(1)
sDataValue = arrParamName(2)
If sDataTypes = "string" Then
cmd.Parameters.Add(sParamName, MySqlDbType.VarChar, 200, sDataValue)
cmd.Parameters(sParamName).Direction = ParameterDirection.Input
ElseIf sDataTypes = "integer" Then
cmd.Parameters.Add(sParamName, MySqlDbType.Int32, 3, sDataValue)
cmd.Parameters(sParamName).Direction = ParameterDirection.Input
ElseIf sDataTypes = "double" Then
cmd.Parameters.Add(sParamName, MySqlDbType.Double, 5, sDataValue)
cmd.Parameters(sParamName).Direction = ParameterDirection.Input
ElseIf sDataTypes = "varchar" Then
cmd.Parameters.Add(sParamName, MySqlDbType.VarChar, 200, sDataValue)
cmd.Parameters(sParamName).Direction = ParameterDirection.Input
Else
cmd.Parameters.Add(sParamName, MySqlDbType.DateTime, 200, sDataValue)
cmd.Parameters(sParamName).Direction = ParameterDirection.Input
End If
Next lCtr
End If
End If
MessageBox.Show(cmd.Parameters(sParamName).Value) 'The result is 0
cmd.ExecuteNonQuery()
conn.Close()
InsertUpdateData = True
Exit Function
Catch ex As MySqlException
MessageBox.Show(ex.Message)
End Try
End Function
/表格
sParameterList = "intPlayerAccountId$integer$" & Label_PlayerAccountID.Text &
"|intStudentId$integer$" & defaultValue &
"|intSemesterId$integer$" & defaultValue &
"|intEducation$integer$" & defaultValue &
"|intPayment$integer$" & defaultValue &
"|dblAmount$integer$" & dblCreditedAmount &
"|dblCreditedAmount$integer$" & dblCreditedAmount &
"|dblAvailableBalance$integer$" & Label_CurrentBalance.Text &
"|intStatus$integer$" & defaultValue &
"|intRequestStatus$integer$" & defaultValue &
"|intProcessedBy$integer$" & 163 &
"|intParentId$integer$" & Label_Walletid.Text
bool = objDataInquiry.InsertUpdateData("sp_Enrollment", sParameterList, 12)
更新
我收到同样的错误PROCEDURE 的参数数量不正确...预期为 12。但为 0
【问题讨论】:
-
我会做出一个疯狂的猜测,这意味着提供给 PROCEDURE 的参数数量是错误的,它应该是 12,但没有给出。请注意,您的代码正在解析某种字符串以获取参数,但我们看不到该字符串是如何提供给您的例程的。
-
好的,我会更新我的问题,请稍候
-
没有必要将
Direction设置为Input,因为这是默认设置。但是,如果您要设置它,则不会在每个If块中设置它,因为这样您就一遍又一遍地编写相同的代码。在End If之后,您只需执行一次。 -
呃,这全是 25 年前的 VB6 时代的旧模式
-
不要使用字符串来尝试传递参数,而应该使用MySqlParameterCollection。
标签: mysql vb.net winforms mariadb