ADO 存储过程 CreateParameter 的参数问题

yuyunliuhen 2009-03-27 02:12:49
部分代码:

mDBManager.GetParameter() = mDBManager.GetCommand()->CreateParameter("charid",adInteger,adParamInput,sizeof(int),vCharInfo.CharID);
mDBManager.GetCommand()->Parameters->Append(mDBManager.GetParameter());
mDBManager.GetParameter() = mDBManager.GetCommand()->CreateParameter("charname",adVarChar,adParamInput,sizeof(vCharInfo.szCharName),vCharInfo.szCharName);
mDBManager.GetCommand()->Parameters->Append(mDBManager.GetParameter());
mDBManager.GetParameter() = mDBManager.GetCommand()->CreateParameter("charsex",adChar,adParamInput,sizeof(vCharInfo.Sex),vCharInfo.Sex);
mDBManager.GetCommand()->Parameters->Append(mDBManager.GetParameter());
mDBManager.GetParameter() = mDBManager.GetCommand()->CreateParameter("charprofession",adChar,adParamInput,sizeof(vCharInfo.Profession),vCharInfo.Profession);
mDBManager.GetCommand()->Parameters->Append(mDBManager.GetParameter());
mDBManager.GetParameter() = mDBManager.GetCommand()->CreateParameter("chartribe",adChar,adParamInput,sizeof(vCharInfo.Tribe),vCharInfo.Tribe);
mDBManager.GetCommand()->Parameters->Append(mDBManager.GetParameter());
if(NULL == mDBManager.ExecuteSP("newcharacter_sp"))
{
return DBERROR_NORMAIL;
}

mDBManager.GetCommand()->Parameters->Delete("charid");
mDBManager.GetCommand()->Parameters->Delete("charname");
mDBManager.GetCommand()->Parameters->Delete("charsex");
mDBManager.GetCommand()->Parameters->Delete("charprofession");
mDBManager.GetCommand()->Parameters->Delete("chartribe");



CREATE PROCEDURE newcharacter_sp @charid bigint,
@charname varchar(16),
@charsex char,
@charprefession char,
@chartribe char
AS
BEGIN
BEGIN TRAN
INSERT INTO CHARACTER_INFO(CHAR_ID,CHAR_NAME,CHAR_SEX,CHAR_PROFESSION,CHAR_TRIBE)
VALUES (@charid,@charname,@charsex,@charprefession,@chartribe)
if @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
else
BEGIN
COMMIT TRAN
END
END
GO




在传参数的时候 当参数是单个字符的时候,如上面的 Sex,Profession,Tribe都是单个字符,就会提示在应用程序中使用了错误的值,但我在差文档的时候也没找到合适的类型 ,仅有adChar adVarChar.

我有这样去测试过

mDBManager.GetParameter() = mDBManager.GetCommand()->CreateParameter("charsex",adChar,adParamInput,sizeof(vCharInfo.Sex)+1,vCharInfo.Sex);
mDBManager.GetCommand()->Parameters->Append(mDBManager.GetParameter());
mDBManager.GetParameter() = mDBManager.GetCommand()->CreateParameter("charprofession",adChar,adParamInput,sizeof(vCharInfo.Profession)+1,vCharInfo.Profession);
mDBManager.GetCommand()->Parameters->Append(mDBManager.GetParameter());
mDBManager.GetParameter() = mDBManager.GetCommand()->CreateParameter("chartribe",adChar,adParamInput,sizeof(vCharInfo.Tribe)+1,vCharInfo.Tribe);
mDBManager.GetCommand()->Parameters->Append(mDBManager.GetParameter());


但却发现传进去的值 ‘1’ ‘0’等值 在插入数据库的时候却是4,请问是怎么回事呢?

另外,存储过程中的事物处理是这样做的么?
谢谢!
...全文
164 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuyunliuhen 2009-03-27
  • 打赏
  • 举报
回复
嗯 这个长度是得注意
我还是换成字符串处理了,不作单个字符处理
sdhdy 2009-03-27
  • 打赏
  • 举报
回复
CREATE PROCEDURE newcharacter_sp @charid bigint, 
@charname varchar(16),
--modify *********************************************
--你要定义长度的,长度不够。
@charsex varchar(50),
@charprefession varchar(50),
@chartribe varchar(50)
AS
BEGIN
BEGIN TRAN
INSERT INTO CHARACTER_INFO(CHAR_ID,CHAR_NAME,CHAR_SEX,CHAR_PROFESSION,CHAR_TRIBE)
VALUES (@charid,@charname,@charsex,@charprefession,@chartribe)
if @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
else
BEGIN
COMMIT TRAN
END
END
GO
ai_li7758521 2009-03-27
  • 打赏
  • 举报
回复
友情帮顶
dawugui 2009-03-27
  • 打赏
  • 举报
回复
ADO的?帮顶.

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧