簡體   English   中英

選擇不返回結果

[英]Select doesn't return result

我有這個SELECT的問題。 當我在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();
}

這是我在程序中調用它的方式:

private void button5_Click(object sender, EventArgs e) {
    string localObject = comboBox5.Text.ToString();
    string localPollutant = comboBox4.Text.ToString();
    int localFirstYear = Convert.ToInt32(comboBox6.Text);
    int localLastYear = Convert.ToInt32(comboBox7.Text);
    getByObjectAndPollutant(localObject,localPollutant,localFirstYear,localLastYear);
}

這是MS Access中的SELECT查詢:

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查詢的結果。 這個SELECT會返回什么嗎? 當這工作時,我將編碼方法基於SELECT繪制圖表。

可能是組合/下拉列表。 奇怪的是, comboBox5.Text返回所選的 ,而不是文本。

嘗試改為

string localObject = comboBox5.SelectedItem.Text;
string localPollutant = comboBox4.SelectedItem.Text;

你好! 最后我找到了解決方案。 SELECT的主要目的是從DataBase獲取一些數據,但是當我得到它時,我使用的不是Item的ID,我使用Item的名稱而它沒有返回任何結果。 所以我想讓我試着用ID來創造條件。

所以工作函數的代碼:

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);
        }

在DataGridView的結果中,我得到了正確的數據,我很高興! 感謝所有想幫助我的人!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM