过程或函数指定了太多参数...如何解决这个问题 [英] procedure or function has too many arguments specified... how to slove this problem
本文介绍了过程或函数指定了太多参数...如何解决这个问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
公开 共享 功能 CreateNewAMSPOSEntry( ByVal objAMSPOSEntry As clsAMSPOSEntry)正如 整数
如果 objAMSPOSEntry 没什么 然后
Throw 新 ArgumentNullException( objAMSPOSEntry)
结束 如果
Dim db As DBAccess = 新 DBAccess
Dim sqlCmd 作为 SqlCommand = 新 SqlCommand()
db.AddParamToSQLCmd(sqlCmd, @ SERIAL_NO,SqlDbType.NVarChar, 30 ,ParameterDirection.Input,objAMSPOSEntry.SERIAL_NO)
db.AddParamToSQLCmd(sqlCmd, @ FLG_TYPE,SqlDbType.Bit, 1 ,ParameterDirection.Input,objAMSPOSEntry.FLG_TYPE )
db.AddParamToSQLCmd(sqlCmd, @ SLNO,System.Data.SqlDbType。 Int, 8 ,ParameterDirection.Output,objAMSPOSEntry.SLNO)
db.SetCommandType(sqlCmd,CommandType.StoredProcedure, SP_CRE ATEPOSENTRY)
db.ExecuteScalarCmd(sqlCmd)
返回 sqlCmd.Parameters( @@ IDENTITY)。值
结束 功能
保存代码:
受保护的 Sub btnSave_Click( ByVal 发件人作为 对象, ByVal e As System.EventArgs)句柄 btnSave.Click
Dim ret 作为 布尔
Dim flg 作为 布尔值
Dim objAMSPOSEntry As clsAMSPOSEntry = 新 clsAMSPOSEntry
如果 txtSerialNum.Text<> 然后
objAMSPOSEntry .SERIAL_NO = txtSerialNum.Text
如果 rdbAcc.Checked = True 然后
flg = True
其他
flg = 错误
结束 如果
objAMSPOSEntry.FLG_TYPE = flg
' 如果不是txtPONO.Text则没有
ret = clsAMSPOSEntry.CreateNewPOSEntry(objAMSPOSEntry)
' End If
如果 ret = True 然后
MsgBox( 成功插入记录!)
结束 如果
其他
MsgBox( 请在点击保存之前填写表格!)
结束 如果
结束 Sub
商店程序:
ALTER PROCEDURE [dbo]。[SP_CREATEPOSENTRY]
(
@SERIAL_NO nvarchar( 30 ),
@ FLG_TYPE位,
)
AS
BEGIN
INSERT INTO [TBL_DEVMASTER]([SERIAL_NO],[FLG_TYPE])VALUES(@SERIAL_不,@ FLG_TYPE);
RETURN @@ IDENTITY
END;
解决方案
更改存储过程以包含@SLNO参数,或者不要尝试从VB代码将其传递给SQL:
db .AddParamToSQLCmd(sqlCmd, @ SERIAL_NO,SqlDbType.NVarChar, 30 ,ParameterDirection.Input,objAMSPOSEntry.SERIAL_NO)
db.AddParamToSQLCmd(sqlCmd, @FLG_TYPE,SqlDbType.Bit, 1 ,ParameterDirection.Input,objAMSPOSEntry.FLG_TYPE)
db.AddParamToSQLCmd(sqlCmd, @ SLNO,System.Data.SqlDbType.Int, 8 ,ParameterDirection.Output,objAMSPOSEntry.SLNO)
ALTERPROCEDURE [dbo]。[SP_CREATEPOSENTRY]
(
@ SERIAL_NO nvarchar ( 30 ),
@ FLG_TYPE < span class =code-keyword> bit ,
)
AS两者必须匹配!
Public Shared Function CreateNewAMSPOSEntry(ByVal objAMSPOSEntry As clsAMSPOSEntry) As Integer
If objAMSPOSEntry Is Nothing Then
Throw New ArgumentNullException("objAMSPOSEntry")
End If
Dim db As DBAccess = New DBAccess
Dim sqlCmd As SqlCommand = New SqlCommand()
db.AddParamToSQLCmd(sqlCmd, "@SERIAL_NO", SqlDbType.NVarChar, 30, ParameterDirection.Input, objAMSPOSEntry.SERIAL_NO)
db.AddParamToSQLCmd(sqlCmd, "@FLG_TYPE", SqlDbType.Bit, 1, ParameterDirection.Input, objAMSPOSEntry.FLG_TYPE)
db.AddParamToSQLCmd(sqlCmd, "@SLNO", System.Data.SqlDbType.Int, 8, ParameterDirection.Output,objAMSPOSEntry.SLNO)
db.SetCommandType(sqlCmd, CommandType.StoredProcedure, "SP_CREATEPOSENTRY")
db.ExecuteScalarCmd(sqlCmd)
Return sqlCmd.Parameters("@@IDENTITY").Value
End Function
Save code:
Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
Dim ret As Boolean
Dim flg As Boolean
Dim objAMSPOSEntry As clsAMSPOSEntry = New clsAMSPOSEntry
If txtSerialNum.Text <> "" Then
objAMSPOSEntry.SERIAL_NO = txtSerialNum.Text
If rdbAcc.Checked = True Then
flg = True
Else
flg = False
End If
objAMSPOSEntry.FLG_TYPE = flg
'If Not txtPONO.Text Is Nothing Then
ret = clsAMSPOSEntry.CreateNewPOSEntry(objAMSPOSEntry)
' End If
If ret = True Then
MsgBox("Successfully Inserted Record!")
End If
Else
MsgBox("Please fill the form before click on Save!")
End If
End Sub
Store Procedure:
ALTER PROCEDURE [dbo].[SP_CREATEPOSENTRY]
(
@SERIAL_NO nvarchar(30),
@FLG_TYPE bit,
)
AS
BEGIN
INSERT INTO [TBL_DEVMASTER] ([SERIAL_NO], [FLG_TYPE]) VALUES ( @SERIAL_NO, @FLG_TYPE);
RETURN @@IDENTITY
END;
解决方案
Either change your Stored Procedure to include the @SLNO parameter, or don't try to pass it to SQL from your VB code:
db.AddParamToSQLCmd(sqlCmd, "@SERIAL_NO", SqlDbType.NVarChar, 30, ParameterDirection.Input, objAMSPOSEntry.SERIAL_NO) db.AddParamToSQLCmd(sqlCmd, "@FLG_TYPE", SqlDbType.Bit, 1, ParameterDirection.Input, objAMSPOSEntry.FLG_TYPE) db.AddParamToSQLCmd(sqlCmd, "@SLNO", System.Data.SqlDbType.Int, 8, ParameterDirection.Output,objAMSPOSEntry.SLNO)
ALTER PROCEDURE [dbo].[SP_CREATEPOSENTRY] ( @SERIAL_NO nvarchar(30), @FLG_TYPE bit, ) ASThe two must match!
这篇关于过程或函数指定了太多参数...如何解决这个问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文