0

我有一个存储过程,它返回一个名称,所以我需要在 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"]);
                                }
}

                        }

但是同样的错误

你能帮我解决我的问题吗?

4

2 回答 2

0

请检查这个答案

var returnParameter = cmd.Parameters.Add("RetVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
int id = (int) returnParameter.Value;
于 2015-06-30T12:02:22.263 回答
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();
于 2015-06-30T12:05:56.817 回答