[英]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.