【问题标题】:retrieving data from sql database using C# with stored procedure使用带有存储过程的 C# 从 sql 数据库中检索数据
【发布时间】:2013-02-01 19:59:53
【问题描述】:

每当我尝试从我的数据库中检索数据时,我总是得到空值。我正在使用的代码如下:

protected void Button2_Click(object sender, EventArgs e)
 {
    SqlConnection myConnection = new SqlConnection(GetConnectionString());
    SqlCommand cmd = new SqlCommand("spSelectCustomer", myConnection);
    cmd.CommandType = CommandType.StoredProcedure;
    myConnection.Open();

    SqlParameter custId = cmd.Parameters.Add("@CustomerId", SqlDbType.Int);
    custId.Direction = ParameterDirection.Input;
    custId.Value = 10;

    SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

    Label1.Text = dr["FirstName"].ToString();
    Label2.Text = dr["LastName"].ToString();
    Label3.Text = dr[3].ToString();
    Label4.Text = dr["Email"].ToString();
}
private static string GetConnectionString()
{
    return ConfigurationManager.ConnectionStrings["Lab3ConnectionString"].ConnectionString;
}

【问题讨论】:

    标签: c# asp.net sql-server stored-procedures


    【解决方案1】:

    你需要调用Read才能访问数据,你的代码应该是

    While (dr.Read())
    {
    
        Label1.Text = dr["FirstName"].ToString();
        Label2.Text = dr["LastName"].ToString();
        Label3.Text = dr[3].ToString();
        Label4.Text = dr["Email"].ToString();
    }
    
    //close DataReader
    dr.Close();
    

    【讨论】:

      【解决方案2】:

      在从 DataReader 读取列值之前,您必须从数据读取器调用 Read() 方法。

      if (dr.Read())
      {
          Label1.Text = dr["FirstName"].ToString();
          Label2.Text = dr["LastName"].ToString();
          Label3.Text = dr[3].ToString();
          Label4.Text = dr["Email"].ToString();
      }
      

      你也可以试试:

      SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.SingleRow);
      

      【讨论】:

        【解决方案3】:

        您在阅读器上错过了对Read() 的呼叫。我还建议您将IDisposable 对象包装在using 语句中,如下所示。

        在从SqlDataReader 检索值时,您似乎还使用了列名和序号位置的奇怪组合。

        protected void Button2_Click(object sender, EventArgs e)
        {
            using (SqlConnection myConnection = new SqlConnection(GetConnectionString()))
            {
                using (SqlCommand cmd = new SqlCommand("spSelectCustomer", myConnection))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    myConnection.Open();
        
                    SqlParameter custId = cmd.Parameters.AddWithValue("@CustomerId", 10);
        
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        if (dr.Read())
                        {
                            Label1.Text = dr["FirstName"].ToString();
                            Label2.Text = dr["LastName"].ToString();
                            Label3.Text = dr[3].ToString();
                            Label4.Text = dr["Email"].ToString();
                        }
                    }
                }
            }
        }
        

        【讨论】:

          【解决方案4】:
          SqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
          while(myReader.Read()) 
          {
          Console.WriteLine(myReader.GetString(0));
          }
          myReader.Close();
          //Implicitly closes the connection because CommandBehavior.CloseConnection was specified.
          

          文档:SqlCommand.ExecuteReader Method

          【讨论】:

            猜你喜欢
            • 2018-05-15
            • 2023-04-02
            • 2020-09-23
            • 2019-01-30
            • 2011-09-08
            • 2019-08-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多