2011-07-17 48 views
0

我有一個方法:獲取錯誤的返回,SQL - 如果

private bool bla() 
{ 

    int Minbuy, ordersTillNow; 
    { 
     SqlConnection connection = new SqlConnection("Data Source=****;Initial Catalog=****;User ID=****;Password=****;Integrated Security=False;"); 
     string commandtext = "SELECT Minbuy FROM items WHERE main = 1"; 
     string commandtext2 = "SELECT ordersTillNow FROM items WHERE main = 1"; 

     SqlCommand command = new SqlCommand(commandtext, connection); 
     SqlCommand command2 = new SqlCommand(commandtext2, connection); 

     connection.Open(); 

     Minbuy = (int)command.ExecuteScalar(); 
     ordersTillNow = (int)command2.ExecuteScalar(); 

     if (Minbuy < ordersTillNow) 
      return true; 
     else 
      return false; 

    } 



} 

而且在page_負載的利用方法:

 if (bla()) 
    { 
     Image_V.Visible = true; 
    } 
    else 
    { 
     Image_X.Visible = true; 
    } 

的對結果查詢中的值SQL是:

MinBuy = 5

ordersTillNow = 1

奇怪的是 - nevermind數據庫中的值是什麼(我已將值更改爲:MinBuy = 1和ordersTillNow = 8) - 它顯示image_v。 (在aspx頁面上 - 圖像可見的兩個都設置爲false)。

代碼有什麼問題?

的DESGIN表:

表名:項目

列:的itemId(INT),主(位),MinBuy(INT),ordersTillNow(INT)。

+1

你能告訴我們表結構嗎?項目表中的主鍵是主鍵嗎? – ysrb

+0

@ysrb:是的,我將結構添加到問題的底部。 – Oshrib

回答

2

我能想到的問題可能是上述SQL的結果可能會返回多於一行。因此,它會給出錯誤的結果。

嘗試的代碼更改爲:

string commandtext = "SELECT TOP 1 Minbuy FROM items WHERE main = 1"; 
string commandtext2 = "SELECT TOP 1 ordersTillNow FROM items WHERE main = 1"; 

而是有2選擇,你可以使用一個選擇

string queryString = "SELECT Minbuy, ordersTillsNow FROM items WHERE main = 1"; 
using (SqlConnection connection = new SqlConnection(
       connectionString)) 
    { 
     connection.Open(); 

     SqlCommand command = new SqlCommand(queryString, connection); 
     SqlDataReader reader = command.ExecuteReader(); 
     while (reader.Read()) 
     { 
      MinBuy = int.Parse(reader[0].ToString()); 
      ordersTillsNow = int.Parse(reader[1].ToString()); 
      //Console.WriteLine(String.Format("{0}", reader[0])); 
     } 
    } 
+0

+1。在management studio中運行選擇並檢查它們是否返回一行。 –

+0

是的,他們返回一行。 – Oshrib

+0

@Bside它是怎麼回事?它解決了這個問題嗎? – ysrb

1

也許你需要:

if (bla()) 
{ 
    Image_V.Visible = true; 
    Image_X.Visible = false; 
} 
else 
{ 
    Image_V.Visible = false; 
    Image_X.Visible = true; 
} 
+0

問題不在if語句上,我認爲它來自於sql cmd,因爲我改變了值,結果是一樣的。 – Oshrib

+1

@Bside:單獨測試bla與圖像可見性:bla **實際上給了什麼?...? **不**網頁正在做什麼。我認爲ypercube有一個非常相關的答案 – gbn

+0

@Bside:您是否嘗試過打印返回的值(Minbuy和ordersTillNow)? –

1

好吧,讓我們來打數據庫只有一次,並得到它回答我們的問題:

private bool bla() 
{ 
    using(SqlConnection connection = new SqlConnection("Data Source=****;Initial Catalog=****;User ID=****;Password=****;Integrated Security=False;")) 
    { 
     string commandtext = "SELECT CONVERT(bit,CASE WHEN Minbuy < ordersTillNow THEN 1 ELSE 0 END) FROM items WHERE main = 1"; 
     SqlCommand command = new SqlCommand(commandtext, connection); 
     connection.Open(); 
     return (bool)command.ExecuteScalar();  
    } 
} 

此代碼還確保關閉連接,您以前沒有照顧。但是如果你仍然沒有看到預期的結果,那麼正如其他人所建議的那樣,你需要檢查圖像顯示代碼是否按預期工作。也許有:

Image_V.Visible = bla(); 
Image_X.Visible = !Image_V.Visible; 

改爲。