我用vb用存储过程的向SQL插入数据,在执行第一次成功,但在点保存,提示说参数没有声明,但重新运行有可以。着急谢谢指点。
存储过程:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[newaddtelex]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[newaddtelex]
GOSET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO
create procedure newaddtelex
@laizi nchar(20),
@haoshu int,
@zhushu int,
@dengji int,
@baotousj nchar(20),
@fawanghetai varchar(50),
@baowenfuzhu varchar(50),
@baowennuir varchar(8000),
@jisqianm nchar(20)
as
declare @baowenbianhao int
set nocount on
insert into userbaoweninfo(原始报文) values
(@baowennuir)select @baowenbianhao=count(*)from userbaoweninfoinsert into userfabao (来自,号数,组数,等级,报头时间,发往何台,附注,电报代号,报文类型,记时签名) values
(@laizi,@haoshu,@zhushu,@dengji,@baotousj,@fawanghetai,@baowenfuzhu,@baowenbianhao,1,@jisqianm)
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
VB代码:
           Cm.CommandText = "newaddtelex"
            Cm.Parameters.Append Cm.CreateParameter("@laizi", adChar, adParamInput, 20)
            Cm.Parameters("@laizi") = Trim(.TextMatrix(1, 1))
            Cm.Parameters.Append Cm.CreateParameter("@haoshu", adInteger, adParamInput)
            Cm.Parameters("@haoshu") = Trim(.TextMatrix(1, 3))
            Cm.Parameters.Append Cm.CreateParameter("@zhushu", adInteger, adParamInput)
            Cm.Parameters("@zhushu") = Trim(.TextMatrix(1, 4))
            Cm.Parameters.Append Cm.CreateParameter("@dengji", adInteger, adParamInput)
            Cm.Parameters("@dengji") = Trim(.TextMatrix(1, 5))
            Cm.Parameters.Append Cm.CreateParameter("@baotousj", adChar, adParamInput, 20)
            Cm.Parameters("@baotousj") = Trim(.TextMatrix(1, 6)) & Trim(.TextMatrix(1, 7))
            Cm.Parameters.Append Cm.CreateParameter("@fawanghetai", adVarChar, adParamInput, 50)
            Cm.Parameters("@fawanghetai") = Trim(.TextMatrix(2, 3))
            Cm.Parameters.Append Cm.CreateParameter("@baowenfuzhu", adVarChar, adParamInput, 50)
            Cm.Parameters("@baowenfuzhu") = Trim(.TextMatrix(3, 3))
            Cm.Parameters.Append Cm.CreateParameter("@baowennuir", adVarChar, adParamInput, 8000)
            Cm.Parameters("@baowennuir") = BaoWenNR
            Cm.Parameters.Append Cm.CreateParameter("@jisqianm", adChar, adParamInput, 20)
            Cm.Parameters("@jisqianm") = Trim(.TextMatrix(1, 8))
            Cm.Execute

解决方案 »

  1.   

    You should separate your Command defining statements from your parameters setting statements.  The Command defining statements should be executed just once.Do this in the Form_Load or a global initialization method:
    Cm.CommandText = "newaddtelex"
                Cm.Parameters.Append Cm.CreateParameter("@laizi", adChar, adParamInput, 20)
                Cm.Parameters.Append Cm.CreateParameter("@haoshu", adInteger, adParamInput)
                Cm.Parameters.Append Cm.CreateParameter("@zhushu", adInteger, adParamInput)
                Cm.Parameters.Append Cm.CreateParameter("@dengji", adInteger, adParamInput)
                Cm.Parameters.Append Cm.CreateParameter("@baotousj", adChar, adParamInput, 20)
                Cm.Parameters.Append Cm.CreateParameter("@fawanghetai", adVarChar, adParamInput, 50)
                Cm.Parameters.Append Cm.CreateParameter("@baowenfuzhu", adVarChar, adParamInput, 50)
                Cm.Parameters.Append Cm.CreateParameter("@baowennuir", adVarChar, adParamInput, 8000)
                Cm.Parameters.Append Cm.CreateParameter("@jisqianm", adChar, adParamInput, 20)Note you need to delcare Cm as a global variable at least at the form level.Then do you parameters setting statements when you click the button or something:
                Cm.Parameters("@laizi") = Trim(.TextMatrix(1, 1))
                Cm.Parameters("@haoshu") = Trim(.TextMatrix(1, 3))
                Cm.Parameters("@zhushu") = Trim(.TextMatrix(1, 4))
                Cm.Parameters("@dengji") = Trim(.TextMatrix(1, 5))
                Cm.Parameters("@baotousj") = Trim(.TextMatrix(1, 6)) & Trim(.TextMatrix(1, 7))
                Cm.Parameters("@fawanghetai") = Trim(.TextMatrix(2, 3))
                Cm.Parameters("@baowenfuzhu") = Trim(.TextMatrix(3, 3))
                Cm.Parameters("@baowennuir") = BaoWenNR
                Cm.Parameters("@jisqianm") = Trim(.TextMatrix(1, 8))
                Cm.ExecuteThe points here:
    Cm is a reusable object that you can repeatedly set its parameters and execute it to get new results.