我就是这样做的,我得到了一个数据类型未命中匹配,但是tamp是一个整数,所以我认为它是其他的东西(我也在程序的另一个阶段传递一个整数到tamp)。 我是否需要通过另一个int传递它?或者这是我的访问声明的问题?整个代码块没有额外的where参数和for循环。
for循环帮助我按顺序加载它们,这对我正在做的事情非常重要
for (int i = -100; i < 100; i++)
{
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "select * from Table1 where Status='" + comboBox5.Text + "'AND Tamp='" + i + "'";
command.CommandText = query;
listBox9.Items.Clear();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
listBox9.Items.Add(reader["Description"].ToString());
}
// MessageBox.Show("Data Saved");
connection.Close();
}
catch (Exception ex)
{ MessageBox.Show("error " + ex); }
}
答案 0 :(得分:3)
假设tamp
被定义为数据库中的整数,请更改
"'AND Tamp='" + i + "'";
到
"' AND Tamp=" + i;
通过在SQL命令中放置单引号,您将为数据库提供字符串而不是整数。
如果您使用的是C#6或更高版本,则可以使用字符串插值以更清晰的方式编写字符串
$"select * from Table1 where Status='{comboBox5.Text}' AND Tamp={i}"
请注意,从安全角度来看,这是不的良好做法。您永远不应该接受用户输入并将其直接放在SQL命令中,因为它允许用户提供恶意输入,例如,删除数据或表。相反,请使用parameterized queries。 comic linked in the comments就是例证。