在C#中使用Execute Reader时的无差异行为

时间:2015-06-30 11:47:55

标签: c# asp.net-mvc executereader

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

                        }

但同样的错误

你能帮助我解决我的问题。

2 个答案:

答案 0 :(得分:0)

Please check this answer out

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();
相关问题