列';值';不属于表

本文关键字:不属于 | 更新日期: 2023-09-27 18:22:39

我在数据库的tblV表中的列名Value下存储了一些数字数据。我想把Value列中的数据放入textbox1。但每当我单击按钮时,它都会显示Column 'Value' does not belong to table错误,即使表中有列Value。是什么导致了这个问题?

第一个是类,第二个是按钮点击事件的代码。

 public DataTable GetMaxno(decimal Licenseno)
    {
        SqlConnection con = new SqlConnection("Data Source=(LocalDB)''MSSQLLocalDB; Integrated Security=True; Initial Catalog=sudipDB;");
        string sql = "select Max(Value) from tblv where Licenseno=@licenseno";
        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.Parameters.AddWithValue("@Licenseno",Licenseno );
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable DT = new DataTable();
        da.Fill(DT);
        return DT;
    }

 tryv tv = new tryv();
    private void button1_Click(object sender, EventArgs e)
    {
        DataTable dt = tv.GetMaxno(Convert.ToDecimal(textBox2.Text));
        if (dt.Rows.Count > 0)
        {
            textBox1.Text= dt.Rows[0]["Value"].ToString();
        }
    }

列';值';不属于表

原因可能是您的查询没有返回任何别名作为Value。你可以用select Max(Value) as Value来解决这个问题,但不要用ExecuteScalar,这正是你想要的。它返回第一行的第一列。

还有几件事;

  • 使用using语句处理您的连接和命令
  • 不要使用AddWithValue。它有时可能会产生意想不到的结果。使用Add方法重载来指定参数类型及其大小

public int GetMaxno(decimal Licenseno)
{
     using(var con = new SqlConnection("Data Source=(LocalDB)''MSSQLLocalDB; Integrated Security=True; Initial Catalog=sudipDB;")
     using(var cmd = con.CreateCommand())
     {
        cmd.CommandText = "select Max(Value) from tblv where Licenseno = @licenseno";
        cmd.Parameters.Add("@licenseno", SqlDbType.Decimal).Value = Licenseno;
        con.Open();
        return (int)cmd.ExecuteScalar();
     }
}

然后你可以做;

textBox1.Text = tv.GetMaxno(Convert.ToDecimal(textBox2.Text)).ToString();

尝试

string sql = "select Max(Value) as Value from tblv where Licenseno=@licenseno";