Запрос выполняется в базе данных Ms Access, но не при запуске из приложения - PullRequest
0 голосов
/ 23 марта 2019

Запрос с параметрами отлично работает в базе данных MS Access.Но когда я предоставляю те же параметры из приложения C # winforms, он не возвращает никаких записей.Если параметр передается в запрос, он будет использовать этот параметр в предложении where, в противном случае он извлечет все записи.

пример данных таблицы шины:

enter image description here

Запрос Ms-Access:

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 - это текстовый столбец.

Замечания : Если я удаляю оператор like в запросе доступа ms и запускаю тот же код в C #, он будет отлично работать и извлекать все записи в таблице.

После этого я отображаю данные в datagridview с использованием bindingsource.

Почему это происходит?

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Вот несколько примеров, которые должны помочь вам начать работу.

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();
            }
        }
0 голосов
/ 23 марта 2019

Вы используете oleDB. Вы должны изменить этот запрос и использовать% в качестве подстановочных знаков. DAO и нативный доступ, который вы используете *, но для ADO или oleDB вы должны использовать% в качестве подстановочных знаков.

...