Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从列表框和日期范围中选择具有选定项的查询_C#_Ms Access - Fatal编程技术网

C# 从列表框和日期范围中选择具有选定项的查询

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

我正在编写一个代码,需要从列表框和2个日期选择器中进行选择,以显示在datagridview上

我的第一个版本的代码已经只处理了日期范围,但是当我已经包含列表框时,我开始收到错误

我的问题是:

 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;我不想成为那个家伙,但如果您首先对查询进行了参数化,这就不会成为问题。使用它们的另一个原因。