Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在公式中使用SQL值_C#_Sql Server_Winforms - Fatal编程技术网

C# 如何在公式中使用SQL值

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; } 我有一个以前的查询,它获取了我

我有一个C winform应用程序,它包含一个公式。该公式工作正常,但根据SQL表中的id,公式中的数字可以更改

我怎样才能做到这一点

我的密码是:

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一样。但是当我尝试运行应用程序时,我得到了一个错误。我更新了我的问题以便更容易理解