带有参数的查询在ms Access数据库中可以完美地工作。但是,当我从C#winforms应用程序提供相同的参数时,它不返回任何记录。 如果将参数传递给查询,则它将在where子句中使用该参数,否则它将检索所有记录。
总线表样本数据:
Ms访问查询:
PARAMETERS parPlateNo Text ( 255 );
SELECT bus.*
FROM bus
WHERE (((bus.plateNo) Like IIf(IsNull([parPlateNo]), True ,"%" & [parPlateNo] & "%")));
C#代码:
using (OleDbConnection conn = new OleDbConnection(myGlobals.connString))
{
using (OleDbDataAdapter adapter = new OleDbDataAdapter())
{
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "qryBus";
if(plateNo == "")
cmd.Parameters.AddWithValue("?", DBNull.Value);
else
cmd.Parameters.AddWithValue("?", plateNo);
adapter.SelectCommand = cmd;
dsDetails = new DataSet();
adapter.Fill(dsDetails, "details");
}
}
}
PlateNo是一个文本列。
备注:如果我在ms访问查询中删除了like语句,并在C#中运行了相同的代码,它将完美运行并检索表中的所有记录。
然后,我使用bindingsource在datagridview中显示数据。
为什么会这样?
答案 0 :(得分:0)
您正在使用oleDB。您必须更改该查询并将%用作通配符。 DAO和本机Access使用*,但是对于ADO或oleDB,必须将%用作通配符。
答案 1 :(得分:0)
这里有一些示例可以帮助您启动并运行它。
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Server=Your_Server_Name;Database=AdventureWorksLT2012;Trusted_Connection=True");
try
{
cmd = new SqlCommand("insert into [dbo].[Student] values(@a,@b,@c)", con);
cmd.Parameters.AddWithValue("@a", int.Parse(textBox1.Text));
cmd.Parameters.AddWithValue("@b", textBox2.Text);
cmd.Parameters.AddWithValue("@c", textBox3.Text);
con.Open();
a = cmd.ExecuteNonQuery();
if (a > 0)
{
MessageBox.Show("Data Submited");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
con.Close();
}
}
AND
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Server=Your_Server_Name;Database=AdventureWorksLT2012;Trusted_Connection=True");
try
{
cmd = new SqlCommand("select * from student where sid=@a", con);
cmd.Parameters.AddWithValue("@a",int.Parse(comboBox1.SelectedItem.ToString()));
con.Open();
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
if (dr.Read())
{
textBox1.Text = dr["sid"].ToString();
textBox2.Text = dr["fname"].ToString();
textBox3.Text = dr["lname"].ToString();
//label1.Text = dr["cdate"].ToString();
}
}
dr.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
con.Close();
}
}