执行存储过程,获取out返回值问题

ares1982526 2006-03-06 01:57:26
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("server=127.0.0.1;database=pubs;uid=sa;password=''");
SqlCommand cmd = new SqlCommand("GetLastname", con);
string strLastname;
cmd.CommandType = CommandType.StoredProcedure;
//firstname input parameter
cmd.Parameters.AddWithValue("@firstname", "Ann");
//lastname output parameter
SqlParameter paraLastname = cmd.Parameters.AddWithValue("@lastname", SqlDbType.VarChar);
paraLastname.Size = 40;
paraLastname.Direction = ParameterDirection.Output;
//Execute Command
con.Open();
cmd.ExecuteScalar();
//Retrieve value of output parameter
if (cmd.Parameters["lastname"].Value != null)
{
strLastname = cmd.Parameters["lastname"].Value.ToString();
}
else
{
strLastname = "Unknown";
}
con.Close();
Response.Write("The last name is" + strLastname);
}

//------------------------------存储过程
Create Procedure GetLastname
(
@firstname Varchar(20),
@lastname Varchar(20) Output
)
As
Select @lastname=au_lname
From Authors
Where au_fname=@firstname


//---------------------------------------
执行后提示将数据类型 varchar 转换为 int 时出错.谁能告诉我是什么原因,存储过程在查询分析器里调试可以正常显示,我用的是vs2005
...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ares1982526 2006-03-06
  • 打赏
  • 举报
回复
按照GSXiaoXiao(牧羊人) 的方法可以执行,但是在vs2005中默认没有Add这个函数啊,还有别的方法吗?
hedonister 2006-03-06
  • 打赏
  • 举报
回复
Select @lastname=au_lname
From Authors
Where au_fname=@firstname

这里估计有问题,你检查下au_fname是不是int型的
GSXiaoXiao 2006-03-06
  • 打赏
  • 举报
回复

SqlParameter paraLastname = cmd.Parameters.AddWithValue("@lastname", SqlDbType.VarChar);

改为:
SqlParameter paraLastname = cmd.Parameters.Add("@lastname", SqlDbType.VarChar,20);
pangyong0221 2006-03-06
  • 打赏
  • 举报
回复
cmd.Parameters["lastname"].Value 和strLastname = cmd.Parameters["lastname"].Value.ToString();变量名前都必须有“@”即须将以上两句改成:
cmd.Parameters["@lastname"].Value 和strLastname = cmd.Parameters["@lastname"].Value.ToString();
活靶子哥哥 2006-03-06
  • 打赏
  • 举报
回复
我没用过vs2005和AddWithValue这个方法,猜测第2个参数是可能是字符串,而SqlDbType.VarChar类型的值默认是int的,问题可能就在这里。
astra1 2006-03-06
  • 打赏
  • 举报
回复
SqlParameter paraLastname = cmd.Parameters.AddWithValue("@lastname", SqlDbType.VarChar);


这里不要用AddWithValue,没有value吧。。。
活靶子哥哥 2006-03-06
  • 打赏
  • 举报
回复
没看出来哪里有类型转换的迹象啊。 你尝试把cmd.ExecuteScalar();换成其他方法如试试

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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