你的那个txtBookId和txtStuId分别是指什么?它们的值从哪里来的?

解决方案 »

  1.   

    what are the data types for StudId and BookId in your stored procedure?
      

  2.   

    txtBookId,txtStuId都是文本框,用于输入借出的书的索书号和学生的学号,数据库中的存储过程如下(我在Sql查询分析器中试过,存储过程没有错)SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GOALTER  proc BorrowBook
    (@BookId char(20)=null,@BookNo tinyint=0,@StuId char(7)=null)
    asdeclare @BI char(20),@SI char(7)
    set @BI=ltrim(@BookId)
    set @SI=ltrim(@StuId)if @BI=''
    begin 
    print '请输入索书号!'
    return 1 
    endif @BookNo=0
    begin
    print '请输入一个合法的编号!'
    return 2
    endif @SI=''
    begin
    print '请输入学号!'
    return 3
    end--状态为1表示在库可借,2表示借出
    if not exists(select * from 书目信息 where ltrim(索书号)=@BI and 书目编号=@BookNo and 状态=1)
    begin 
    print '该书不存在或已借出!'
    return 4
    endif not exists(select * from 学生信息 where ltrim(学号)=@SI)
    begin
    print '该学号不存在!'
    return 5
    end--可以加上判断该生借书本数是否超过上限或是否有过期数update 书目信息
    set 状态=2
    where ltrim(索书号)=@BI and 书目编号=@BookNo and 状态=1
     
    insert into 租借信息(学号,索书号,书目编号,借书时间)
    values (@SI,@BI,@BookNo,getdate())print '借书成功!'
    return 0
    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
      

  3.   

    不好意思,帖错了,这是我修改后的数据库中的存储过程,下面是原来的,数据库方面我能够肯定没有问题,就是vb.net中的问题CREATE proc BorrowBook
    (@BookId char(20)=null,@StuId char(7)=null)
    asdeclare @BI char(20),@SI char(7)
    set @BI=ltrim(@BookId)
    set @SI=ltrim(@StuId)if @BI=''
    begin 
    print '请输入索书号!'
    return 1 
    endif @SI=''
    begin
    print '请输入学号!'
    return 2
    endif not exists(select * from 书籍信息 where ltrim(索书号)=@BI and 现存数>0)
    begin 
    print '该书不存在或已全部借出!'
    return 3
    endif not exists(select * from 学生信息 where ltrim(学号)=@SI)
    begin
    print '该学号不存在!'
    return 4
    end--可以加上判断该生借书本数是否超过上限或是否有过期数update 书籍信息
    set 现存数=现存数-1
    where ltrim(索书号)=@BI
     
    insert into 租借信息(学号,索书号,借书时间)
    values (@SI,@BI,getdate())print '借书成功!'
    return 0GO
      

  4.   

    try
    SqlCmdBorrow.Parameters.Add(New SqlClient.SqlParameter("@BookId", SqlDbType.Char, 20)).Value = txtBookIdSqlCmdBorrow.Parameters.Add(New SqlClient.SqlParameter("@BookNo", SqlDbType.Byte)).Value = 0SqlCmdBorrow.Parameters.Add(New SqlClient.SqlParameter("@StuId", SqlDbType.Char, 7)).Value = txtStuId
      

  5.   

    试试(txtBookId和txtStuId->txtBookId.Text和txtStuId.Text):SqlCmdBorrow.Parameters.Add(New SqlClient.SqlParameter("@BookId", SqlDbType.VarChar, 20)).Value = txtBookId.Text
            SqlCmdBorrow.Parameters.Add(New SqlClient.SqlParameter("@StuId", SqlDbType.VarChar, 7)).Value = txtStuId.Text
      

  6.   

    谢谢两位,不过我觉得我的问题不在两位提供的语句上,因为我试过改成char,还是同样的错
      

  7.   

    你的txtBookId,txtStuId都是文本框,怎么能把文本框当成参数传递给存储过程呢?正确的应该是:
    SqlCmdBorrow.Parameters.Add(New SqlClient.SqlParameter("@BookId", SqlDbType.VarChar, 20)).Value = txtBookId.Text
            SqlCmdBorrow.Parameters.Add(New SqlClient.SqlParameter("@StuId", SqlDbType.VarChar, 7)).Value = txtStuId.Text
      

  8.   

    >>>>因为我试过改成char,还是同样的错我的意思不是改变字段类型,
    你获取的是txtBookId,txtStuId文本框的值,所以应该将:
    txtBookId和txtStuId
    改成:
    txtBookId.Text和txtStuId.Text
      

  9.   

    SqlCmdBorrow.Parameters.Add(New SqlClient.SqlParameter("@BookId", SqlDbType.VarChar, 20)).Value = Request.Form("txtBookId")
            SqlCmdBorrow.Parameters.Add(New SqlClient.SqlParameter("@StuId", SqlDbType.VarChar, 7)).Value = Request.Form("txtStuId")这样也行:)
      

  10.   

    唉,我真是粗心,我还以为.net像vb6那样也可以用默认属性。但令我不解的是,改了后还是同样的错误。???????????????????????????
      

  11.   

    谁能不能贴段能运行的代码调用update和insert的存储过程,以供学习,不胜感激
      

  12.   

    你说的文本框是Web控件还是Html控件或者是普通的html标签??
      

  13.   

    对了,这次的错误为:未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中其他信息:系统错误。