C# 如何在公式中使用SQL值
我有一个C winform应用程序,它包含一个公式。该公式工作正常,但根据SQL表中的id,公式中的数字可以更改 我怎样才能做到这一点 我的密码是:C# 如何在公式中使用SQL值,c#,sql-server,winforms,C#,Sql Server,Winforms,我有一个C winform应用程序,它包含一个公式。该公式工作正常,但根据SQL表中的id,公式中的数字可以更改 我怎样才能做到这一点 我的密码是: private void button1_Click(object sender, EventArgs e) { decimal ufa1; decimal aav1; decimal uft1; ufa1 = uft1 * aav1 * VALUE FROM SQL; } 我有一个以前的查询,它获取了我
private void button1_Click(object sender, EventArgs e)
{
decimal ufa1;
decimal aav1;
decimal uft1;
ufa1 = uft1 * aav1 * VALUE FROM SQL;
}
我有一个以前的查询,它获取了我想要的值,但我无法将其集成到公式中
获取id的代码是:
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select prumos from dbo.modelos where id = '"+id+"'";
SqlDataReader dr = cmd.ExecuteReader();
新代码:
由于依赖关系,我不得不将select from id更改为一个名为prumos的列,该列的int值与id相同,但它不会运行
con.Open();
using (SqlCommand cmd = new SqlCommand("select prumos from dbo.modelos where prumos = @prumos", con))
{
cmd.Parameters.Add(new SqlParameter("prumos", prumos));
ValueFromDB = decimal.Parse(cmd.ExecuteScalar().ToString());
}
有解决方案吗?不使用DataReader,只需读取并以标量形式执行命令: 您可以这样做:
public int GetValue(int id)
{
....
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select top 1 prumos from dbo.modelos where id = '"+id+"'";
int value = int.Parse(cmd.ExecuteScalar().ToString());
return value;
}
然后:
private void button1_Click(object sender, EventArgs e)
{
decimal ufa1;
decimal aav1;
decimal uft1;
ufa1 = uft1 * aav1 * GetValue(1);
}
请注意,如果需要将Id发送到GetValue函数,可以将其作为参数发送
private void button1_Click(object sender, EventArgs e)
{
decimal ufa1;
decimal aav1;
decimal uft1;
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select prumos from dbo.modelos where id = '"+id+"'";
//SqlDataReader dr = cmd.ExecuteReader();
//decimal ValueFromDB = (decimal)cmd.ExecuteScalar();
decimal ValueFromDB = Decimal.Parse(cmd.ExecuteScalar().ToString());
ufa1 = uft1 * aav1 * ValueFromDB ;
}
或者更好:
private void button1_Click(object sender, EventArgs e)
{
decimal ufa1;
decimal aav1;
decimal uft1;
decimal ValueFromDB;
using (SqlCommand cmd = new SqlCommand("select prumos from dbo.modelos where id = @ID", con))
{
cmd.Parameters.Add(new SqlParameter("ID", id));
ValueFromDB = Decimal.Parse(cmd.ExecuteScalar().ToString());
}
ufa1 = uft1 * aav1 * ValueFromDB;
}
使用参数可避免sql注入。很好的提示,但我猜id是一个PK,所以可能前1名不是必需的是的,我想是的,但我不确定,预防似乎是明智的;谢谢你的回复,我试过了,但是在这之后,我如何在公式中指出值呢?现在得到错误,对象引用没有定义为对象的实例。在int value=int.Parsecmd.ExecuteScalar.ToString行中;那么,具有该id的项目可能不存在。您可以像这样处理它:obj val=cmd.ExecuteScalar;伊夫瓦尔=null返回int.Parseval.ToString;否则返回0//如果id不存在,则为默认值感谢您的帮助,我尝试了它,但在第行中出现错误:decimal ValueFromDB=decimalcmd.ExecuteScalar;指定的转换无效。请使用double-ValueFromDB=double.Parsecmd.ExecuteScalar.ToString重试;然后我刚刚编辑了postoperator“*”不能应用于“decimal”和“double”类型的操作数。看起来数学运算只能发生在相同类型的变量上,我更新了anwser并操作了decimal.Parse而不是double.Parse快速跟进问题。由于依赖关系,我不得不将目标列从id更改为prumos,witch包含int值,就像id一样。但是当我尝试运行应用程序时,我得到了一个错误。我更新了我的问题以便更容易理解