2017-09-12 91 views
-1

如何重寫此代碼以僅顯示哪些球員的BattingAverage(小數)值在兩個文本框的輸入之間的行?此外MinBatting(文本框)應該被設置爲默認值0.000和MaxBetting(文本框)爲1.000。如何重寫此SQL查詢以在小數之間進行選擇?

至於現在我只能搜索一個數字,而所有BattingAverage的玩家都會出現這個數字。

enter image description here

這裏是我的代碼:

private void btnSearch_Click(object sender, EventArgs e) 
{ 
    SqlConnection conn = new SqlConnection(); 

    // sql connection string 
    conn.ConnectionString = "Integrated 
    Security=true;server=LUSQL01;database=Baseball"; 

    // sql command 
    string str = "SELECT * FROM [BASEBALL].[dbo].[Players] where 
    (BattingAverage LIKE Concat('%',@search,'%'))"; 

    SqlCommand cmd = new SqlCommand(str, conn); 
    cmd.Parameters.Add("@search", SqlDbType.NVarChar).Value = 
    txbSearch.Text; 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 

    SqlDataAdapter adapter = new SqlDataAdapter(); 
    adapter.SelectCommand = cmd; 

    DataTable ds = new DataTable(); 
    adapter.Fill(ds); 

    playersDataGridView.DataSource = ds; 

    conn.Close(); 
} 
+2

SELECT * FROM BaseBall.dbo.Players WHERE BattingAverage BETWEEN(minVal,MaxVal) – Namphibian

+0

嘗試使用LINQ代替編寫SQL,您將看到語法錯誤,而不是依賴運行時SQL。 – Joagwa

+0

@Joagwa,好主意,所以你有什麼想法我的代碼看起來像LINQ? –

回答

2
string str = "SELECT * FROM [BASEBALL].[dbo].[Players] where convert(float,BattingAverage) BETWEEN @min and @max"; 

SqlCommand cmd = new SqlCommand(str, conn); 
cmd.Parameters.Add("@min", SqlDbType.Float).Value = float.Parse(txbSearch.Text); 
cmd.Parameters.Add("@max", SqlDbType.Float).Value = float.Parse(txbSearch2.Text); 
+0

注意:沒有錯誤處理,如果您的文本框或數據中都有非浮點數據,這將會爆炸。 – wdomains

-1

LINQ的替代

var result = from player in db.Players 
     where player.BattingAverage > lowestValue && player.BattingAverage < highestValue 
     select player; 

類似的東西。