一个存储过程,如下:CREATE PROCEDURE RegisterNewBook
@Cover NVARCHAR(1000),--图书的封面
@OldISBN NVARCHAR(20), --图书旧的ISBN号
@NewISBN NVARCHAR(20), --图书新的ISBN号,如果遇到旧的10位ISBN则进行转化到13位的新ISBN
@BookName NVARCHAR(100), --图书名
@Author NVARCHAR(100), --图书作者
@BookPrice NUMERIC(18,2), --书价
@CD BIT,--是否有光盘
@BookIntroduction NVARCHAR(4000), --图书部分章节简介
@BookType TINYINT, --图书种类,1图书,2期刊,3其他
@PublishDateText NVARCHAR(50), --存原始输入值(出版社的原始日期,一般不规范)
@PublishDateTime DATETIME, --出版日期,存入数据库前就转换成日期格式(方便搜索)
@PublishName NVARCHAR(50), --出版社
@ChinaSort NVARCHAR(25), --中图分类号
@DepartmentID INT, --图书馆编号
@FatherID INT, --学校编号
@Abstract NVARCHAR(4000), -- 图书内容提要
@AuthorIntroduction NVARCHAR(MAX),--作者简介
@Catalog NVARCHAR(MAX),--图书目录
@BookPage INT, --图书页码
@BarCode NVARCHAR(25), --条形码
@WaterNum NVARCHAR(50), --种次号
@GroupCode NVARCHAR(100),--图书的批次号
@ShelfCode NVARCHAR(100), --图书的排架号
@Discount NUMERIC(5,4)--图书的折扣
AS
BEGIN
SET NOCOUNT ON
INSERT INTO MainBook

Cover,
OldISBN,
NewISBN,
BookName,
Author,
BookPrice,
CD,
BookIntroduction,
BookType,
PublishDateText, --存原始输入值(出版社的原始日期,一般不规范)
--PublishDateTime, --出版日期,存入数据库前就转换成日期格式(方便搜索)
PublishName,
ChinaSort,
Abstract, -- 图书内容提要
AuthorIntroduction,--作者简介
Catalog,--图书目录
BookPage --图书页码
)
VALUES
(
@Cover,--图书的封面
@OldISBN,
@NewISBN,
@BookName,
@Author,
@BookPrice,
@CD,
@BookIntroduction,
@BookType,
@PublishDateText, --存原始输入值(出版社的原始日期,一般不规范)
--@PublishDateTime, --出版日期,存入数据库前就转换成日期格式(方便搜索)
@PublishName,
@ChinaSort,
@Abstract, -- 图书内容提要
@AuthorIntroduction,--作者简介
@Catalog,--图书目录
@BookPage --图书页码
)
INSERT INTO ViceBook
(
BookID,
DepartmentID,
FatherID,
BarCode,
WaterNum, --注:如何使用这个字段,当批量导入数据时,如何增加流水号(种次号)
GroupCode,--图书的批次号
ShelfCode, --图书的排架号
Discount--图书的折扣
)
VALUES
(
SCOPE_IDENTITY(),
@DepartmentID,
@FatherID,
@BarCode,
@WaterNum,
@GroupCode,--图书的批次号
@ShelfCode, --图书的排架号
@Discount--图书的折扣
)
END
GO
SET NOCOUNT OFF
GO-----这里是一个参数提供程序
public SqlParameter paraInstance(string parmsName, SqlDbType parmsType, int size, object value,ParameterDirection parmsDirection)
        {
            SqlParameter para = new SqlParameter(parmsName, parmsType, size);
            para.Value = value;
            para.Direction = parmsDirection;
            return para;
        }
为存储过程提供参数
public bool RegisterNewBook(MDepartment mdepartment)
        {
            SqlParameter[] parms = new SqlParameter[23];
            parms[0] = lzj.paraInstance("@Cover", SqlDbType.NVarChar, 1000, mdepartment.Cover, ParameterDirection.Input);
            parms[1] = lzj.paraInstance("@OldISBN", SqlDbType.NVarChar, 20, mdepartment.OldISBN, ParameterDirection.Input);
            parms[2] = lzj.paraInstance("@NewISBN", SqlDbType.NVarChar, 20, mdepartment.NewISBN, ParameterDirection.Input);
            parms[3] = lzj.paraInstance("@BookName", SqlDbType.NVarChar, 100, mdepartment.BookName, ParameterDirection.Input);
            parms[4] = lzj.paraInstance("@Author", SqlDbType.NVarChar, 100, mdepartment.Author, ParameterDirection.Input);
            parms[5] = lzj.paraInstance("@BookPrice", SqlDbType.Decimal, 8, mdepartment.BookPrice, ParameterDirection.Input);
            parms[6] = lzj.paraInstance("@CD", SqlDbType.Bit, 1, mdepartment.CD, ParameterDirection.Input);
            parms[7] = lzj.paraInstance("@BookIntroduction", SqlDbType.NVarChar, -1, mdepartment.BookIntroduction, ParameterDirection.Input);
            parms[8] = lzj.paraInstance("@BookType", SqlDbType.TinyInt, 1, mdepartment.BookType, ParameterDirection.Input);
            parms[9] = lzj.paraInstance("@PublishDateText", SqlDbType.NVarChar, 50, mdepartment.PublishDateText, ParameterDirection.Input);
            //parms[22] = lzj.paraInstance("@PublishDateTime", SqlDbType.DateTime, 8, mdepartment.PublishDateTime, ParameterDirection.Input);
            parms[10] = lzj.paraInstance("@PublishName", SqlDbType.NVarChar, 50, mdepartment.PublishName, ParameterDirection.Input);
            parms[11] = lzj.paraInstance("@ChinaSort", SqlDbType.NVarChar, 25, mdepartment.ChinaSort, ParameterDirection.Input);
            parms[12] = lzj.paraInstance("@DepartmentID", SqlDbType.Int, 4, mdepartment.DepartmentID, ParameterDirection.Input);
            parms[13] = lzj.paraInstance("@FatherID", SqlDbType.Int, 4, mdepartment.FatherID, ParameterDirection.Input);
            parms[14] = lzj.paraInstance("@Abstract", SqlDbType.NVarChar, 4000, mdepartment.Abstract, ParameterDirection.Input);
            parms[15] = lzj.paraInstance("@AuthorIntroduction", SqlDbType.NVarChar, -1, mdepartment.AuthorIntroduction, ParameterDirection.Input);
            parms[16] = lzj.paraInstance("@Catalog", SqlDbType.NVarChar, -1, mdepartment.Catalog, ParameterDirection.Input);
            parms[17] = lzj.paraInstance("@BookPage", SqlDbType.Int, 4, mdepartment.BookPage, ParameterDirection.Input);
            parms[18] = lzj.paraInstance("@BarCode", SqlDbType.NVarChar, 25, mdepartment.BarCode, ParameterDirection.Input);
            parms[19] = lzj.paraInstance("@WaterNum", SqlDbType.NVarChar, 50, mdepartment.WaterNum, ParameterDirection.Input);
            parms[20] = lzj.paraInstance("@GroupCode", SqlDbType.NVarChar, 100, mdepartment.GroupCode, ParameterDirection.Input);
            parms[21] = lzj.paraInstance("@ShelfCode", SqlDbType.NVarChar, 100, mdepartment.ShelfCode, ParameterDirection.Input);
            parms[22] = lzj.paraInstance("@Discount", SqlDbType.Decimal, 5, mdepartment.Discount, ParameterDirection.Input);
            bool flag = lzj.ExecuteNonQuery("RegisterNewBook", CommandType.StoredProcedure, parms);
            return flag;
        }问题:始终提示没有提供 “@BookName”参数,
我明明已经提供了啊,为什么提示没有提供了?

解决方案 »

  1.   

    在查询分析器中——》左边的对象浏览器——》选择要调试的存储过程——》右击鼠标——》选择调试——》输入参数——》设置完参数值后点击执行,就会出现一个浮动工具条,上面有单步执行,断点设置等。 
    若按上面步骤不行,则继续设置: 
    控制面板——》管理工具——》服务——》MSSQLSERVER——》“登录”选项卡,把登录身份选“此帐户”,然后用户名和密码添你登录Windows用的用户名和密码(你必须是有管理员权限的),然后重启SQL SERVER服务。在查询分析器里调试的时候用sa登录或Windows帐户登录都可以
    -----------
    VS 2005中调试存储过程方法
      

  2.   

    单步调试,可能是哪个参数为null。