C# ASP.Net内核中的原始查询

C# ASP.Net内核中的原始查询,c#,asp.net,postgresql,C#,Asp.net,Postgresql,我来自一个PHP背景,在这里您可以创建一个PDO对象并立即进行查询 我有一个数据库,从中提取数据,例如,是一个Object->Quantity的列表(例如Items sales)。这是另一个应用程序的一部分,我正在编写一个应用程序来显示一些统计数据 我找不到如何在ASP.NETCore中执行原始查询并拥有IEnumerable对象。所有示例都使用实体框架和模型(我当前的应用程序中没有实体框架和模型,因为它充满了原始sql查询)。您可以像下面那样执行原始sql(但很容易注入) 如果您100%不能使

我来自一个PHP背景,在这里您可以创建一个PDO对象并立即进行查询

我有一个数据库,从中提取数据,例如,是一个Object->Quantity的列表(例如Items sales)。这是另一个应用程序的一部分,我正在编写一个应用程序来显示一些统计数据


我找不到如何在ASP.NETCore中执行原始查询并拥有IEnumerable对象。所有示例都使用实体框架和模型(我当前的应用程序中没有实体框架和模型,因为它充满了原始sql查询)。

您可以像下面那样执行原始sql(但很容易注入)

如果您100%不能使用EF及其数据库/代码优先技术,我只会这样做


我更新了答案,以确保对象一超出范围就被处理。

值得注意的是,SqlConnection、SqlCommand和IDataReader都实现IDisposable,因此您应该使用tooThanks将它们包装起来。这是关于ADO.Net的吗?我不认为数据读取器是可枚举的。但这回答了一半的问题。你完全可以根据结果建立一个可枚举列表。斯科特·佩厄姆(Scott Perham)的评论是C#的东西。在using语句中包装对象创建可确保正确处置实现IDisposable接口的对象。如果使用DataReader,请小心处理连接对象。DataReader在其生存期内需要打开连接。不是说不要处理连接,只是要小心,在使用完DataReader之前,连接不会被处理。只有当您根据使用过的输入编写查询字符串时,连接才容易被注入。为这些值使用参数使其非常安全/波比桌子
using (var context = new SqlConnection())
{
      var cmd = new SqlCommand
      {
          CommandText = "SELECT * FROM Table",
          CommandType = CommandType.Text,
          Connection = context
      };

      context.Open();

      var reader = cmd.ExecuteReader();

      reader.Close();
  }