C# 从列表框和日期范围中选择具有选定项的查询
我正在编写一个代码,需要从列表框和2个日期选择器中进行选择,以显示在datagridview上 我的第一个版本的代码已经只处理了日期范围,但是当我已经包含列表框时,我开始收到错误 我的问题是:C# 从列表框和日期范围中选择具有选定项的查询,c#,ms-access,C#,Ms Access,我正在编写一个代码,需要从列表框和2个日期选择器中进行选择,以显示在datagridview上 我的第一个版本的代码已经只处理了日期范围,但是当我已经包含列表框时,我开始收到错误 我的问题是: private void button6_Click(object sender, EventArgs e) { OleDbDataAdapter ad = new OleDbDataAdapter("select * from customer where network_na
private void button6_Click(object sender, EventArgs e)
{
OleDbDataAdapter ad = new OleDbDataAdapter("select * from customer where network_name=" + listBox1.SelectedItem.ToString() +" where date_loaded between #" + dateTimePicker1.Value.ToShortDateString() + "# and #" + dateTimePicker2.Value.ToShortDateString() + "#", mycon);
DataSet ds = new DataSet();
ad.Fill(ds, "load");
dataTable = ds.Tables["load"];
if (ds.Tables[0].Rows.Count > 0)
{
dataGridView1.DataSource = ds;
dataGridView1.DataMember = ds.Tables[0].ToString();
}
}
网络名称是一个文本值,因此需要用单引号括起来。另外,你有两个WHERE子句。用AND子句替换第二个,并用一组括号将其括起来。试试这个:
OleDbDataAdapter ad = new OleDbDataAdapter("select * from customer where network_name='" + listBox1.SelectedItem.ToString() +"' AND (date_loaded between #" + dateTimePicker1.Value.ToShortDateString() + "# and #" + dateTimePicker2.Value.ToShortDateString() + "#)", mycon);
网络名称是一个文本值,因此需要用单引号括起来。另外,你有两个WHERE子句。用AND子句替换第二个,并用一组括号将其括起来。试试这个:
OleDbDataAdapter ad = new OleDbDataAdapter("select * from customer where network_name='" + listBox1.SelectedItem.ToString() +"' AND (date_loaded between #" + dateTimePicker1.Value.ToShortDateString() + "# and #" + dateTimePicker2.Value.ToShortDateString() + "#)", mycon);
查询中有两个where,将第二个替换为and
select * from customer where network_name=" + listBox1.SelectedItem.ToString() +" and date_loaded between #" + dateTimePicker1.Value.ToShortDateString() + "# and #" + dateTimePicker2.Value.ToShortDateString() + "#"
查询中有两个where,将第二个替换为and
select * from customer where network_name=" + listBox1.SelectedItem.ToString() +" and date_loaded between #" + dateTimePicker1.Value.ToShortDateString() + "# and #" + dateTimePicker2.Value.ToShortDateString() + "#"
请参数化您的查询。准备好的语句可以防止SQL注入攻击,并且性能更好。请参阅: 我自己对OleDb不太熟悉,我更喜欢MySQL,但它应该是这样的
cmd.Connection = mycon;
cmd.CommandText = "SELECT * FROM customer WHERE " +
"network_name = ? AND (date_loaded BETWEEN #?# and #?#)"
cmd.Parameters.Add("@network_name", OleDbType.VarChar);
cmd.Parameters.Add("@D1", OleDbType.DBDate);
cmd.Parameters.Add("@D2", OleDbType.DBDate);
cmd.Parameters["@network_name"].Value = listBox1.SelectedItem.ToString();
cmd.Parameters["@D1"].Value = dateTimePicker1.Value.ToShortDateString();
cmd.Parameters["@D2"].Value = dateTimePicker2.Value.ToShortDateString();
OleDbDataAdapter ad = new OleDbDataAdapter(cmd);
请参数化您的查询。准备好的语句可以防止SQL注入攻击,并且性能更好。请参阅: 我自己对OleDb不太熟悉,我更喜欢MySQL,但它应该是这样的
cmd.Connection = mycon;
cmd.CommandText = "SELECT * FROM customer WHERE " +
"network_name = ? AND (date_loaded BETWEEN #?# and #?#)"
cmd.Parameters.Add("@network_name", OleDbType.VarChar);
cmd.Parameters.Add("@D1", OleDbType.DBDate);
cmd.Parameters.Add("@D2", OleDbType.DBDate);
cmd.Parameters["@network_name"].Value = listBox1.SelectedItem.ToString();
cmd.Parameters["@D1"].Value = dateTimePicker1.Value.ToShortDateString();
cmd.Parameters["@D2"].Value = dateTimePicker2.Value.ToShortDateString();
OleDbDataAdapter ad = new OleDbDataAdapter(cmd);
我想知道我的问题出在哪里收到的错误是什么?正如Mike所建议的,这可能只是字符串周围的引号问题。{查询表达式“network_name=Smart”中缺少运算符的语法错误,其中日期在2014年6月2日至2014年7月2日之间加载。}它在广告上。Fillds,load;我不想成为那个家伙,但如果您首先对查询进行了参数化,这就不会成为问题。还有一个使用它们的原因。我想知道我的问题是什么,收到的错误是什么?正如Mike所建议的,这可能只是字符串周围的引号问题。{查询表达式“network_name=Smart”中缺少运算符的语法错误,其中日期在2014年6月2日至2014年7月2日之间加载。}它在广告上。Fillds,load;我不想成为那个家伙,但如果您首先对查询进行了参数化,这就不会成为问题。使用它们的另一个原因。