如何在 C# 中像存储过程一样执行访问查询



我正在尝试使用参数执行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 中,如果我将参数加倍(注释行),它可以正常工作,但没有它,我会收到一条错误消息,指出还需要一个参数,我无法弄清楚原因。

我想通了。

在查询

中,我们不必指定参数,只需在查询中使用@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;
      }

希望帮助了某人。

最新更新