过程或函数指定了太多参数...如何解决这个问题 [英] procedure or function has too many arguments specified... how to slove this problem

查看:220
本文介绍了过程或函数指定了太多参数...如何解决这个问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 公开 共享 功能 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)



  ALTER   PROCEDURE  [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,
)
AS

The two must match!


这篇关于过程或函数指定了太多参数...如何解决这个问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆