查询在Ms Access数据库中运行,但在应用程序中执行时不运行

时间:2019-03-22 21:55:46

标签: c# winforms ms-access oledb

带有参数的查询在ms Access数据库中可以完美地工作。但是,当我从C#winforms应用程序提供相同的参数时,它不返回任何记录。 如果将参数传递给查询,则它将在where子句中使用该参数,否则它将检索所有记录。

总线表样本数据:

enter image description here

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中显示数据。

为什么会这样?

2 个答案:

答案 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();
            }
        }