列';值';不属于表
本文关键字:不属于 | 更新日期: 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";