我有这个过滤表。
using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString))
{
myDatabaseConnection.Open();
using (SqlCommand mySqlCommand = new SqlCommand("Select * from Employee WHERE EmpID >= @from AND EmpID <= @to", myDatabaseConnection))
{
mySqlCommand.CommandType = CommandType.Text;
mySqlCommand.Parameters.AddWithValue("@from", textBox1.Text);
mySqlCommand.Parameters.AddWithValue("@to", textBox2.Text);
{
ds = new DataSet();
adapter = new SqlDataAdapter(mySqlCommand);
adapter.Fill(ds, "Employee");
}
}
}
例如,我在textBox1中有4001
,在texBox2中有4017
。我向我提供了4001
,4002
,4003
的结果。 。 。 4017
问题是例如textBox1中的4001
,而textBox2中没有,它没有结果。如何从4001
获得结果直到表的最后一个值?如果textBox1为空且textBox2为4017
,假设1的值最小,结果将为1,2,3到4017?
答案 0 :(得分:0)
最简单的方法是将@from和@to的值默认为空文本框的最小值和最大值
例如。如果EmpId是整数
int minId = 0;
int maxId = 99999;
if (!string.IsNullOrEmpty(textBox1.text))
minId = int.Parse(textBox1.text);
if (!string.IsNullOrEmpty(textBox2.text))
maxId = int.Parse(textBox2.text);
mySqlCommand.Parameters.AddWithValue("@from", minId);
mySqlCommand.Parameters.AddWithValue("@to", maxId);
这样做,你总是会有一个值来比较。
答案 1 :(得分:0)
根据您的要求,这应该有效:
using (SqlCommand mySqlCommand = new SqlCommand {Connection = myDatabaseConnection})
{
mySqlCommand.CommandText = "Select * from Employee WHERE " +
textBox2.Text.Trim() == "" ? "EmpID >= @from" : "EmpID >= @from AND EmpID <= @to";
mySqlCommand.CommandType = CommandType.Text;
mySqlCommand.Parameters.AddWithValue("@from", textBox1.Text.Trim() != "" ? textBox1.Text : int.Parse(textBox2.Text.Trim()) - 3);
if(textBox2.Text.Trim() != "")
mySqlCommand.Parameters.AddWithValue("@to", textBox2.Text);
ds = new DataSet();
adapter = new SqlDataAdapter(mySqlCommand);
adapter.Fill(ds, "Employee");
}