为什么我的查询不能在c#中正确执行

本文关键字:执行 我的 查询 不能 为什么 | 更新日期: 2023-09-27 18:15:56

在MSSQL中编写这个查询:

SELECT Code, Description,LEAD(Code, 1) OVER (ORDER BY code) AS next_code FROM Liguanea_Lane WHERE code LIKE '%88%'

在我的c#代码中编写了相同的查询,只是这次它接受来自comboBox名称"search"的输入,并在按钮单击时执行。如下图:

  private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            string connectionString = "Data Source=JAVY26;Initial Catalog=Pharmacies;Integrated Security=True";
            SqlConnection con = new SqlConnection(connectionString);
            con.Open();
            string query = "SELECT Code, Description,LEAD(Code, 1) OVER (ORDER BY code) AS next_code FROM Liguanea_Lane WHERE code LIKE '%" + search.Text+"%'; ";
            SqlCommand cmd = new SqlCommand(query, con);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                string scode = dr.GetString(dr.GetOrdinal("next_code"));
                textBox2.Text = scode;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

我的问题是,我一直得到:"数据是空的。此方法或属性不能在空值上调用。我的查询在我的代码错了吗?

为什么我的查询不能在c#中正确执行

我认为问题是由于:

while (dr.Read())
{
   string scode = dr.GetString(dr.GetOrdinal("next_code"));
   textBox2.Text = scode;
}

这是一个没有用户干预的循环,假设查询返回3行:

Code   Description   Next_Code
-------------------------------
088    ABC           881
881    BCD           882
882    CDE           Null

在循环的第一次循环中,它将881赋值给textbox2.Text;在第二次传递中,它将882赋值给textbox2。文本在第三次传递时,因为next_code为null而出错。

我即兴发挥。我只是在我现有的数据库中添加了一个next_code字段,并根据之前和进行的内容复制值。只是在数据库中做了所有的工作,并修改了代码:

private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            string connectionString = "Data Source=JAVY26;Initial Catalog=Pharmacies;Integrated Security=True";
            SqlConnection con = new SqlConnection(connectionString);
            con.Open();
            string query = "SELECT Code, Description, Next_Code FROM Liguanea_Lane WHERE code LIKE '%" + search.Text+"%'; ";
            SqlCommand cmd = new SqlCommand(query, con);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
               string scode = dr.GetString(dr.GetOrdinal("next_code"));
                textBox2.Text = scode;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

它现在返回我需要的值。感谢大家的反馈。感谢你花时间尝试和帮助。