Как выполнить запрос на доступ в C # как хранимая процедура - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь выполнить запрос MS Access с параметрами, и всегда получаю сообщение об ошибке, что требуется еще 1 параметр. Вот мой запрос

PARAMETERS RendszamParam Text ( 255 );
SELECT *
FROM Auto
WHERE Rendszam=[RendszamParam];

Метод, который вызывает запрос:

public Auto RendszamAlapjan (string rendszam)
{
     Auto auto = null;

     using (OleDbConnection connection = new OleDbConnection(KapcsolatAdatai.KapcsolatiString))
     {
        OleDbCommand command = connection.CreateCommand();

       command.CommandType = CommandType.StoredProcedure;
       command.CommandText = "AtoRendszamAlapjan";
       command.Parameters.Add("@RendszamParam", OleDbType.VarChar).Value = rendszam;
       //command.Parameters.Add("@RendszamParam", OleDbType.VarChar).Value = rendszam;

        connection.Open();

        using (OleDbDataReader reader = command.ExecuteReader())
        {
           while (reader.Read())
           {
              auto = MapEntiy(reader);
           }
        }
     }

     return auto;
  }

private Auto MapEntiy(OleDbDataReader data)
{
     Auto auto = new Auto
     {
        Rendszam = data["rendszam"].ToString(),
        Tipus = data["tipus"].ToString(),
        Kategoria = data["kategoria"].ToString(),
        UtasokSzama = int.Parse(data["utasok_szama"].ToString()),
        AjtokSzama = int.Parse(data["ajtok_szama"].ToString()),
        Tempomat = bool.Parse(data["tempomat"].ToString()),
        BerletiDij = double.Parse(data["berleti_dij"].ToString())
     };

     return auto;
}

В RendszamAlapjan , если я удваиваю параметры (закомментированную строку), он работает нормально, но без него я получаю сообщение об ошибке, что требуется еще один параметр, и я не могу понять, почему.

1 Ответ

0 голосов
/ 10 января 2019

Я разобрался.

В запросе нам не нужно указывать параметры, просто используйте @sing в запросе, и Accsess 2013 автоматически распознает, что это переменная (параметр), например:

SELECT *
FROM Auto
WHERE Rendszam=[@RendszamParam];

И вызывающий метод выглядит так:

public Auto RendszamAlapjan (string rendszam)
      {
         Auto auto = null;

         using (OleDbConnection connection = new OleDbConnection(KapcsolatAdatai.KapcsolatiString))
         {
            OleDbCommand command = connection.CreateCommand();

            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = "AtoRendszamAlapjan";
            command.Parameters.Add("@RendszamParam", OleDbType.VarChar).Value = rendszam;

            connection.Open();

            using (OleDbDataReader reader = command.ExecuteReader())
            {
               while (reader.Read())
               {
                  auto = MapEntiy(reader);
               }
            }
         }

         return auto;
      }

Надежда помогла кому-то.

...