我有一个存储过程,它返回一个名称,所以我需要在C#中输入名称
所以我只是从C#执行Sp并使用ExecuteReader()
读取输出,如下所示
using (var objCommand = new SqlCommand("SpName", objConnection))
{
objCommand.Parameters.AddWithValue("@Param1", Param);
objCommand.Parameters.AddWithValue("@Purpose", Purpose);
objConnection.Open();
objCommand.CommandType = CommandType.StoredProcedure;
using (var reader = objCommand.ExecuteReader())
{
while (reader.Read())
{
objemailsend.Name = Convert.ToString(reader["Name"]);
}
}
}
objConnection.Close();
它提供了一个例外
索引超出范围异常
我确信索引名称相同,我的意思是Sp也返回相同的名称
Name
----
name1
如上所述
然后我尝试了类似下面的内容,现在异常消失,它返回一个数值,我不知道从哪里来的值,它与我的SP结果不一样
objexample.Name = reader[0].ToString();
也尝试了
using (var reader = objCommand.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
objemailsend.Name = Convert.ToString(reader["Name"]);
}
}
}
但同样的错误
你能帮助我解决我的问题。
答案 0 :(得分:0)
var returnParameter = cmd.Parameters.Add("RetVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
int id = (int) returnParameter.Value;
答案 1 :(得分:0)
尝试使用像objemailsend.Name = reader [1] .ToString()这样的索引来检索值。 我假设1是name列的索引。 当您获得Index Out of range execption时,这将有所帮助,因为在这里您明确提供了name列的索引。
using (var objCommand = new SqlCommand("SpName", objConnection))
{
objCommand.Parameters.AddWithValue("@Param1", Param);
objCommand.Parameters.AddWithValue("@Purpose", Purpose);
objConnection.Open();
objCommand.CommandType = CommandType.StoredProcedure;
using (var reader = objCommand.ExecuteReader())
{
while (reader.Read())
{
objemailsend.Name = Convert.ToString(reader[1]);
}
}
}
objConnection.Close();