为什么我的存储过程老出错误!在delphi下(在查询分析器中是正确的)
表 如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[BankBill]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[BankBill]
GOCREATE TABLE [dbo].[BankBill] (
[SquNum] [int] IDENTITY (1, 1) NOT NULL ,
[DealDate] [datetime] NULL ,
[Debit] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Lend] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[AccountName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[AccountNo] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Auditinged] [bit] NOT NULL 
) ON [PRIMARY]
GO存储过程如下:
CREATE procedure writeBankBill
(
@AccountNo varchar(50),
@AccountName varchar(50),
@DealDate Datetime,
@Debit varchar(50),
@Lend varchar(50)
)
AS
insert into BankBill(AccountNo, AccountName, DealDate, Debit, Lend)   
values(@AccountNo, @AccountName, @DealDate, @Debit, @Lend)
GOdelphi中调用存储过程如下:procedure TDModule.InsertDataToBankBill(const DealDate:TDatetime; const AccountNo,AccountName,Lend,Debit:String);
var
   tempParameter: TParameter;
begin
   with DModule.Strpre do
   begin
      if Active then Close;      ProcedureName:='ReadFromExcelAndWriteToBankBill';
      Try
         Parameters.Clear;         tempParameter:=Parameters.AddParameter;
         tempParameter.Name:='@DealDate';
         tempParameter.DataType:= ftDateTime;
         tempParameter.Direction:=PdInput;
         tempParameter.Value:= DealDate;         tempParameter:=Parameters.AddParameter ;
         tempParameter.Name:='@AccountNo';
         tempParameter.DataType:= ftString;
         tempParameter.Direction:=PdInput;
         tempParameter.Value:=AccountNo;         tempParameter:=Parameters.AddParameter ;
         tempParameter.Name:='@AccountName';
         tempParameter.DataType:= ftString;
         tempParameter.Direction:=PdInput;
         tempParameter.Value:=AccountName;         tempParameter:=Parameters.AddParameter ;
         tempParameter.Name:='@Lend';
         tempParameter.DataType:= ftString;
         tempParameter.Direction:=PdInput;
         tempParameter.Value:=Lend;         tempParameter:=Parameters.AddParameter ;
         tempParameter.Name:='@Debit';
         tempParameter.DataType:= ftString;
         tempParameter.Direction:=PdInput;
         tempParameter.Value:=Debit;         ExecProc;
      finally
         Close;
      end;
   end;end;

解决方案 »

  1.   

    exec writeBankBill '1','1','2004-01-01','1','1'
    服务器: 消息 515,级别 16,状态 2,过程 writeBankBill,行 12
    无法将 NULL 值插入列 'Auditinged',表 'BPS.dbo.BankBill';该列不允许空值。INSERT 失败。
    语句已终止。
      

  2.   

    不好意思 存促过程贴错误了
    CREATE procedure ReadFromExcelAndWriteToBankBill
    (
    @AccountNo varchar(50),
    @AccountName varchar(50),
    @DealDate Datetime,
    @Debit varchar(50),
    @Lend varchar(50)
    )
    AS
    insert into BankBill(AccountNo, AccountName, DealDate, Debit, Lend)   
    values(@AccountNo, @AccountName, @DealDate, @Debit, @Lend)
    GO
      

  3.   

    exec ReadFromExcelAndWriteToBankBill '1','1','2004-01-01','1','1'服务器: 消息 515,级别 16,状态 2,过程 ReadFromExcelAndWriteToBankBill,行 10
    无法将 NULL 值插入列 'Auditinged',表 'BPS.dbo.BankBill';该列不允许空值。INSERT 失败。
    语句已终止。
    你得存储过程有问题
      

  4.   

    BankBill表的Auditinged字段不允许为空,你在insert into BankBill的时候没有对它进行赋值
      

  5.   

    Auditinged字段 有默认值 为0 的啊
      

  6.   

    我在查询分析器里面执行是正确的啊
    exec ReadFromExcelAndWriteToBankBill '1','1','2004-01-01','1','1'
      

  7.   

    为什么我的存储过程老出错误!在delphi下(在查询分析器中是正确的)
    表 如下:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[BankBill]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[BankBill]
    GOCREATE TABLE [dbo].[BankBill] (
    [SquNum] [int] IDENTITY (1, 1) NOT NULL ,
    [DealDate] [datetime] NULL ,
    [Debit] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Lend] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [AccountName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [AccountNo] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Auditinged] [bit] NOT NULL --该字段默认值为 0
    ) ON [PRIMARY]
    GO存储过程如下:
    CREATE procedure ReadFromExcelAndWriteToBankBill
    (
    @AccountNo varchar(50),
    @AccountName varchar(50),
    @DealDate Datetime,
    @Debit varchar(50),
    @Lend varchar(50)
    )
    AS
    insert into BankBill(AccountNo, AccountName, DealDate, Debit, Lend)   
    values(@AccountNo, @AccountName, @DealDate, @Debit, @Lend)
    GO
    delphi中调用存储过程如下:procedure TDModule.InsertDataToBankBill(const DealDate:TDatetime; const AccountNo,AccountName,Lend,Debit:String);
    var
       tempParameter: TParameter;
    begin
       with DModule.Strpre do
       begin
          if Active then Close;      ProcedureName:='ReadFromExcelAndWriteToBankBill';
          Try
             Parameters.Clear;         tempParameter:=Parameters.AddParameter;
             tempParameter.Name:='@DealDate';
             tempParameter.DataType:= ftDateTime;
             tempParameter.Direction:=PdInput;
             tempParameter.Value:= DealDate;         tempParameter:=Parameters.AddParameter ;
             tempParameter.Name:='@AccountNo';
             tempParameter.DataType:= ftString;
             tempParameter.Direction:=PdInput;
             tempParameter.Value:=AccountNo;         tempParameter:=Parameters.AddParameter ;
             tempParameter.Name:='@AccountName';
             tempParameter.DataType:= ftString;
             tempParameter.Direction:=PdInput;
             tempParameter.Value:=AccountName;         tempParameter:=Parameters.AddParameter ;
             tempParameter.Name:='@Lend';
             tempParameter.DataType:= ftString;
             tempParameter.Direction:=PdInput;
             tempParameter.Value:=Lend;         tempParameter:=Parameters.AddParameter ;
             tempParameter.Name:='@Debit';
             tempParameter.DataType:= ftString;
             tempParameter.Direction:=PdInput;
             tempParameter.Value:=Debit;         ExecProc;
          finally
             Close;
          end;
       end;end;
      

  8.   

    不能将 数据类型varchar  转化为 datetime
      

  9.   

    错误信息 :   数据类型varchar  转化为 datetime 出错误
      

  10.   

    Parameters的顺序应该和存储过程的参数顺序相同,你的与数据库不同
      

  11.   

    tempParameter:=Parameters.AddParameter ;
    tempParameter.Name:='@AccountNo';
    tempParameter.DataType:= ftString;
    tempParameter.Direction:=PdInput;
    tempParameter.Value:=AccountNo;tempParameter:=Parameters.AddParameter ;
    tempParameter.Name:='@AccountName';
    tempParameter.DataType:= ftString;
    tempParameter.Direction:=PdInput;
    tempParameter.Value:=AccountName;tempParameter:=Parameters.AddParameter;
    tempParameter.Name:='@DealDate';
    tempParameter.DataType:= ftDateTime;
    tempParameter.Direction:=PdInput;
    tempParameter.Value:= DealDate;tempParameter:=Parameters.AddParameter ;
    tempParameter.Name:='@Debit';
    tempParameter.DataType:= ftString;
    tempParameter.Direction:=PdInput;
    tempParameter.Value:=Debit;tempParameter:=Parameters.AddParameter ;
    tempParameter.Name:='@Lend';
    tempParameter.DataType:= ftString;
    tempParameter.Direction:=PdInput;
    tempParameter.Value:=Lend;
      

  12.   

    To  hongqi162(失踪的月亮) 
    好 了 谢谢