2017-09-12 28 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; 

类似的东西。

相关问题