2016-11-17 55 views
1

我有一個包含公式的C#winform應用程序。該公式工作正常,但取決於SQL表中的ID,公式中的數字可能會更改。如何在公式中使用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(); 

新代碼: 由於依存的,我不得不選擇從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()); 
    } 

任何解決方案?

+0

https://msdn.microsoft.com/es-es/library/haa3afyz(v=vs.110).aspx –

+3

使用參數以避免sql注入。 http://stackoverflow.com/questions/7505808/why-do-we-always-prefer-using-parameters-in-sql-statements –

回答

0
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; 
    } 
+0

感謝您的幫助,我試了一下,但得到了一行錯誤:'decimal ValueFromDB =(decimal)cmd.ExecuteScalar();' '指定的轉換無效' – MarcIT

+0

嗯,好吧,試試雙重ValueFromDB = Double.Parse(cmd.ExecuteScalar()。ToString());然後。我剛剛編輯了我的文章 – Yanga

+0

'運算符'*'不能應用於類型'decimal'和'double''的操作數 – MarcIT

3

而不是使用的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()函數,可以將其作爲參數發送。

+0

好的提示,但我的猜測是'ID'是'PK'所以可能'頂部1'沒有必要 –

+0

是的我猜是這樣,但因爲我不知道,預防措施似乎明智;) –

+0

感謝您的答覆,我試過了,但在此之後,我怎麼能指出公式中的值? – MarcIT