执行存储过程,获取out返回值问题
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
问题点数:20、回复次数:7Top
1 楼xiahouwen(武眉博<活靶子.NET>)回复于 2006-03-06 14:14:41 得分 0
没看出来哪里有类型转换的迹象啊。 你尝试把cmd.ExecuteScalar();换成其他方法如试试Top
2 楼astra1(Hyperion)回复于 2006-03-06 14:14:58 得分 0
SqlParameter paraLastname = cmd.Parameters.AddWithValue("@lastname", SqlDbType.VarChar);
这里不要用AddWithValue,没有value吧。。。Top
3 楼xiahouwen(武眉博<活靶子.NET>)回复于 2006-03-06 14:28:34 得分 0
我没用过vs2005和AddWithValue这个方法,猜测第2个参数是可能是字符串,而SqlDbType.VarChar类型的值默认是int的,问题可能就在这里。Top
4 楼pangyong0221(Forget)回复于 2006-03-06 14:32:25 得分 0
cmd.Parameters["lastname"].Value 和strLastname = cmd.Parameters["lastname"].Value.ToString();变量名前都必须有“@”即须将以上两句改成:
cmd.Parameters["@lastname"].Value 和strLastname = cmd.Parameters["@lastname"].Value.ToString();Top
5 楼GSXiaoXiao(牧羊人)回复于 2006-03-06 14:32:35 得分 20
SqlParameter paraLastname = cmd.Parameters.AddWithValue("@lastname", SqlDbType.VarChar);
改为:
SqlParameter paraLastname = cmd.Parameters.Add("@lastname", SqlDbType.VarChar,20);Top
6 楼hedonister(冰戈)回复于 2006-03-06 14:33:28 得分 0
Select @lastname=au_lname
From Authors
Where au_fname=@firstname
这里估计有问题,你检查下au_fname是不是int型的Top
7 楼ares1982526()回复于 2006-03-06 15:03:30 得分 0
按照GSXiaoXiao(牧羊人) 的方法可以执行,但是在vs2005中默认没有Add这个函数啊,还有别的方法吗?Top




