Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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,我对这个选择有问题。当我在MS Access上执行它时,结果会正确、完整地返回。当我试图通过C#执行它时,相同的查询不会返回任何结果。SELECT的前一个变体是由适配器实现的,用于在dataGridView中显示SELECT的结果。但是当我执行它时,我只得到一个带有列名的空表 private void getByObjectAndPollutant(string Object, string Pollutant, int firstYear, int lastYear) {

我对这个选择有问题。当我在MS Access上执行它时,结果会正确、完整地返回。当我试图通过C#执行它时,相同的查询不会返回任何结果。SELECT的前一个变体是由适配器实现的,用于在dataGridView中显示SELECT的结果。但是当我执行它时,我只得到一个带有列名的空表

private void getByObjectAndPollutant(string Object, string Pollutant, 
    int firstYear, int lastYear) 
{
    List<string> result = new List<string>();
    // line breaks added without concatenation, for readability.
    cmd = new OleDbCommand("SELECT object_name, p_name, mpc, emission_concentration, 
        [year] FROM Pollutants INNER JOIN (Objects INNER JOIN Emissions 
        ON Objects.o_id = Emissions.e_o_id) ON Pollutants.p_id = Emissions.e_p_id 
        WHERE (object_name = '" + Object + "' AND p_name = '" + Pollutant + "' AND 
        [year] BETWEEN " + firstYear + " AND " + lastYear + ") ;", con);          
    con.Open();
    reader = cmd.ExecuteReader();
    while (reader.Read()) {
        var myString = reader.GetString(0);
        result.Add(myString);
        richTextBox1.Text += myString;
    }
    con.Close();
}
这是MS Access中的选择查询:

SELECT object_name, p_name, mpc, emission_concentration, year  
FROM Pollutants 
INNER JOIN (Objects 
    INNER JOIN Emissions ON Objects.o_id=Emissions.e_o_id) 
ON Pollutants.p_id=Emissions.e_p_id  
WHERE object_name="some name" And p_name="some name" And year Between 2011 And 2015;
这是之前的方法代码:

private void getByObjectAndPollutant(string Object, string Pollutant, int firstYear, 
    int lastYear) 
{
    con.Open(); 
    DataTable dt = new DataTable(); 
    adapt = new OleDbDataAdapter(this long select); 
    adapt.Fill(dt); 
    dataGridView2.DataSource = dt; 
    con.Close();
}

我使用reader或adapter的主要原因是为了获得SELECT查询的结果。这是你的选择吗?当这项工作完成后,我将根据选择编码绘制图表的方法。

可能是组合/下拉列表。奇怪的是,
comboBox5.Text
返回选定的值,而不是文本

试着换成

string localObject = comboBox5.SelectedItem.Text;
string localPollutant = comboBox4.SelectedItem.Text;
你好!!最后我找到了解决办法。SELECT的主要目的是从数据库中获取一些数据,但在获取数据时,我并没有使用 Item,我使用一个Item的名称,它不返回任何结果。所以我想让我 尝试使用ID创建条件

因此,工作函数的代码:

工作函数调用的代码:

结果DataGridView我得到了正确的数据,我非常高兴!!!感谢所有试图帮助我的人


您可以共享在Access上执行的查询吗?我注意到的一个问题是您只使用dataReader.GetString(0)。其余的列根本不被访问。我还强烈建议使用字符串索引器datareader[“colName”]]可能是string.Join(reader.GetValues(),“”),作为快速检查,而不是getstring(0)。在添加行之后,您可能还需要新行。不幸的是,此答案可能重复,但不会更改任何内容。但这比仅仅从组合框中获取文本要好得多。我之前测试的是,我的组合框文本返回正确的值,并且它们返回正确的值。
string localObject = comboBox5.SelectedItem.Text;
string localPollutant = comboBox4.SelectedItem.Text;
private void getByObjectAndPollutant(int Object, int Pollutant, int firstYear, int lastYear)
            {          
                con.Open();
                DataTable dt = new DataTable();
                adapt = new OleDbDataAdapter("SELECT mpc, emission_concentration FROM Pollutants INNER JOIN (Objects INNER JOIN Emissions ON Objects.o_id = Emissions.e_o_id) ON Pollutants.p_id = Emissions.e_p_id WHERE Objects.o_id=" + Object + " AND Pollutants.p_id=" + Pollutant + " AND Emissions.[year] BETWEEN " + firstYear + " AND " + lastYear + ";", con);
                adapt.Fill(dt);
                dataGridView2.DataSource = dt;
                con.Close();
            }
private void button5_Click(object sender, EventArgs e)
        {
            int localObject = Convert.ToInt32(comboBox4.SelectedValue.ToString());
            int localPollutant = Convert.ToInt32(comboBox5.SelectedValue.ToString());
            int localFirstYear = Convert.ToInt32(comboBox6.SelectedItem.ToString());
            int localLastYear = Convert.ToInt32(comboBox7.SelectedItem.ToString());

            getByObjectAndPollutant(localObject,localPollutant,localFirstYear,localLastYear);
        }