我正在尝试调用存储过程并返回<math.h>
而不是返回值。我附上了我正在使用的存储过程的图像。
我按如下方式执行存储过程:
@KeyNo
然而,在调用它之后,它返回0而不是172155.有关如何解决此问题的任何建议吗?
存储过程:
答案 0 :(得分:1)
当您尝试返回值时,应使用ExecuteScalar而不是ExecuteNonQuery。
这里有一个例子: ExecuteScalar
答案 1 :(得分:0)
SqlDataReader lSqlDataReader = lSqlCommand.ExecuteReader();
while (lSqlDataReader.Read())
Here you get all return values in lSqlDataReader
UPDATE 编辑您的程序
select @KeyNo as 'KeyNo', @return_value as 'Return Value';
和 在C#代码写
var ReturnValue=0;
var KeyNo=0;
while (lSqlDataReader.Read())
{
ReturnValue=lSqlDataReader.GetInt("Return Value");
KeyNo=lSqlDataReader.GetInt("KeyNo");
}
答案 2 :(得分:0)
基于这些评论,我认为你会混淆很多概念。看起来您需要OUTPUT
,而不是RETURN
值。
我仍然不清楚你想对你的数据表做什么,但这就是你如何为每一行&#34;行获取一个新密钥&#34;:
using (SqlCommand cmd = new SqlCommand("GetKeyNumber", homelinkconn))
{
//setup the command one time, not in every loop iteration
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@KeyName", "VGMNO");
SqlParameter par_KeyNo = new SqlParameter("@KeyNo", SqlDbType.Int);
par_KeyNo.Direction = ParameterDirection.Output;
cmd.Parameters.Add(par_KeyNo);
for (int row = start.Row; row <= end.Row; row++)
{
cmd.ExecuteNonQuery();
var key = par_KeyNo.Value;
//unlcear what you want to do here. Currently you would be
//resetting the last row over and over every iteration
dt.Rows[????]["VGMNO"] = key;
}
}
答案 3 :(得分:-1)
ExecuteNonQuery()返回受影响的行数 ExecuteScalar()返回第一行的第一列