C#调用存储过程参数类型错误
mydb.AddSqlParameter("@empname",this.dataGridView1[5,this.dataGridView1.CurrentCell.R...
mydb.AddSqlParameter("@empname", this.dataGridView1[5,this.dataGridView1.CurrentCell.RowIndex].Value.ToString().Trim());
mydb.AddSqlParameter("@jobnum", this.dataGridView1[6, this.dataGridView1.CurrentCell.RowIndex].Value.ToString().Trim());
mydb.AddSqlParameter("@position",SqlDbType.NVarChar);//存储过程返回值类型
mydb.Parameters["@position"].Direction = ParameterDirection.InputOutput;
mydb.Open();
MessageBox.Show(mydb.Parameters["@position"].SqlDbType.ToString());
mydb.ExcuteStoreProcedure("getPosition");
string position = mydb.Parameters["@position"].Value.ToString().Trim();
如上:我的存储过程三个参数,其中一个为输出参数。在执行时出现错误“数据类型从NVARCHAR转换为INT时出错”。因此,我通过消息框查询,发现输出参数@position居然为INT类型。。。可明明我已经在 mydb.AddSqlParameter("@position",SqlDbType.NVarChar)把其设为字符了啊??
坐等高手解答,谢谢!
关键的代码是这里:
mydb.AddSqlParameter("@position",SqlDbType.NVarChar);//存储过程返回值类型
mydb.Parameters["@position"].Direction = ParameterDirection.InputOutput;
mydb.Open();
MessageBox.Show(mydb.Parameters["@position"].SqlDbType.ToString());
这里我设置好参数类型为字符和返回类型,但为什么消息框却提示为INT类型? 展开
mydb.AddSqlParameter("@jobnum", this.dataGridView1[6, this.dataGridView1.CurrentCell.RowIndex].Value.ToString().Trim());
mydb.AddSqlParameter("@position",SqlDbType.NVarChar);//存储过程返回值类型
mydb.Parameters["@position"].Direction = ParameterDirection.InputOutput;
mydb.Open();
MessageBox.Show(mydb.Parameters["@position"].SqlDbType.ToString());
mydb.ExcuteStoreProcedure("getPosition");
string position = mydb.Parameters["@position"].Value.ToString().Trim();
如上:我的存储过程三个参数,其中一个为输出参数。在执行时出现错误“数据类型从NVARCHAR转换为INT时出错”。因此,我通过消息框查询,发现输出参数@position居然为INT类型。。。可明明我已经在 mydb.AddSqlParameter("@position",SqlDbType.NVarChar)把其设为字符了啊??
坐等高手解答,谢谢!
关键的代码是这里:
mydb.AddSqlParameter("@position",SqlDbType.NVarChar);//存储过程返回值类型
mydb.Parameters["@position"].Direction = ParameterDirection.InputOutput;
mydb.Open();
MessageBox.Show(mydb.Parameters["@position"].SqlDbType.ToString());
这里我设置好参数类型为字符和返回类型,但为什么消息框却提示为INT类型? 展开
展开全部
你存储过程中返回的那个输出值倒底是什么类弄的。。
更多追问追答
追问
直接引用SQLDBTYPE的,系统自带的
追答
没明白我的意思,我是说你存储过程的定义中,那个参数是怎么定义的。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加个断点,获取到传的参数,
exec 过程名 参数
看下报什么错,
如果还不行,就在过程下面,加一个print 把语句输出来,调试下
exec 过程名 参数
看下报什么错,
如果还不行,就在过程下面,加一个print 把语句输出来,调试下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的代码在哪条语句上面报的错?
追问
mydb.ExcuteStoreProcedure("getPosition");这里报错的。存储过程如下:
BEGIN
SET NOCOUNT ON;
select @position=position from employerdeploy where empname=@empname and jobnum=@jobnum order by deploytime desc
END
追答
你用什么方法连接的数据库?换个方法看看,看下面连接:
http://stackoverflow.com/questions/3433694/how-to-run-the-stored-procedure-that-has-output-parameter-from-c
关键代码如下:
using (SqlCommand cmd = new SqlCommand("MyStoredProcedure", cn))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parm = new SqlParameter("@pkid", SqlDbType.Int);
parm.Value = 1;
parm.Direction = ParameterDirection.Input;
cmd.Parameters.Add(parm);
SqlParameter parm2 = new SqlParameter("@ProductName", SqlDbType.VarChar);
parm2.Size = 50;
parm2.Direction = ParameterDirection.Output; // This is important!
cmd.Parameters.Add(parm2);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询