【问题标题】:Jut get as result: System.Data.SqlClient.SqlDataReader结果得到: System.Data.SqlClient.SqlDataReader
【发布时间】:2017-01-26 20:20:36
【问题描述】:

有人可以帮帮我吗? 我只是得到结果 tb_localidade: System.Data.SqlClient.SqlDataReader

为什么?代码如下:

private void btn_normalizar_Click(object sender, EventArgs e)
{
    //connection string - one or other doenst work
    //SqlConnection conn = new SqlConnection("DataSource=FRANCISCO_GP;Initial Catalog=Normalizacao;Integrated Security=True;");

   SqlConnection conn = new SqlConnection(Properties.Settings.Default.connString);

   string sql = "SELECT ART_DESIG from Arterias where ART_COD = '10110'";

   SqlCommand cmd = new SqlCommand(sql, conn);

   conn.Open();

   SqlDataReader leitor = cmd.ExecuteReader();

   tb_localidade.Text = leitor.ToString();

   conn.Close();

}

【问题讨论】:

  • 您是否搜索过有关如何使用 DataReader 的示例?周围有很多,没有一个使用 ToString 来检索记录的内容
  • 请阅读How to Ask并编辑您的标题和正文
  • 你真正想要的是 ExecuteScalar。

标签: c# .net sql-server


【解决方案1】:

您可以通过在数据阅读器上调用 Read() 并分配结果来做到这一点:

private void btn_normalizar_Click(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.connString))
    {
        conn.Open();

        string sql = "SELECT ART_DESIG from Arterias where ART_COD = '10110'";

        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            SqlDataReader leitor = cmd.ExecuteReader();

            while (leitor.Read())
            {
                tb_localidade.Text = leitor["ART_DESIG"].ToString();
            }
        }
    }
}

另一个注意事项是,为您的SqlConnectionSqlCommand 对象使用using 块是一个好习惯。

注意:这是为结果集中的每一行将结果分配给tb_localidade.Text。如果您只打算将此记录为一条记录,则可能需要查看.ExecuteScalar()(见下文)。

private void btn_normalizar_Click(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.connString))
    {
        conn.Open();

        string sql = "SELECT ART_DESIG from Arterias where ART_COD = '10110'";

        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            tb_localidade.Text = cmd.ExecuteScalar().ToString();
        }
    }
}

【讨论】:

    【解决方案2】:

    在执行“executeReader()”之前,你必须阅读才能得到结果。

    【讨论】:

      【解决方案3】:

      改进了 Siyual 的响应。您只在寻找一个结果,这明确地处理了连接和数据读取器。

      private void btn_normalizar_Click(object sender, EventArgs e)
      {
          using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.connString))
          {
              conn.Open();
      
              string sql = "SELECT ART_DESIG from Arterias where ART_COD = '10110'";
      
              using(SqlCommand cmd = new SqlCommand(sql, conn)) {
      
                  using(SqlDataReader leitor = cmd.ExecuteReader()) 
                  {
                      if (leitor.Read())
                      {
                          tb_localidade.Text = leitor["ART_DESIG"].ToString();
                      }
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        你应该这样做

        SqlDataReader leitor = cmd.ExecuteReader();
        string res="";
        while(leitor.Read())
        {
            res=leitor.GetValue(0).ToString()///////if in sql it is varchar or nvarshar
        }
        
        tb_localidade.Text = res;
        

        实际上 datareader 是一维表,我们可以使用 GetValue 或 GetInt32 或 ...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-31
          • 1970-01-01
          • 2021-09-25
          • 2015-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多