【问题标题】:Is there any way to connect MSSQL server to .NET CORE (2.2) API without using EF?有什么方法可以在不使用 EF 的情况下将 MSSQL 服务器连接到 .NET CORE (2.2) API?
【发布时间】:2019-02-21 07:32:58
【问题描述】:

我是 .Net Core 的新手,截至目前,我正在尝试从 .Net Core API 连接 MSSQL Server 中的现有数据库。

但我发现的所有示例都是使用 EF。

但我想从用户定义的类中连接MSSQL服务器,如下所示。

DataBaseConnection.cs

 public class DatabaseConnection 
    {
        private SqlDataAdapter sqlAdapter;
        private SqlConnection sqlConnection;
        SqlCommand sqlCommand = new SqlCommand();

        // Initialise Connection

        public DatabaseConnection()
        {
            sqlAdapter = new SqlDataAdapter();
            sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
        }

        // Open Database Connection if Closed or Broken

        private SqlConnection openConnection()
        {
            if (sqlConnection.State == ConnectionState.Closed || sqlConnection.State == ConnectionState.Broken)
            {
                sqlConnection.Open();
            }
            return sqlConnection;
        }
}

在构造函数中,我得到的错误是

appsettings.json

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=HealthAPI;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

是否有可能在不使用 EF 的情况下与数据库进行连接?

【问题讨论】:

  • 是的。您收到的错误与配置管理器有关。这不是数据库连接错误。如果你在那里硬编码你的连接字符串,它可能会工作。

标签: c# .net api asp.net-core .net-core


【解决方案1】:

我使用解决方法做到了这一点。下面是代码。

public abstract class BaseDataService
{
    private Database database = null;

    public BaseDataService()
    {
        DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory(new SystemConfigurationSource(false).GetSection), false);
        this.database = DatabaseFactory.CreateDatabase("_connection");
    }
    public Database SqlDatabase
    {
        get
        {
            return this.database;
        }

        set
        {
            this.database = value;
        }
    }
}

App.config 文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="system.data" type="System.Data.Common.DbProviderFactoriesConfigurationHandler, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null"/>
  </configSections>

  <connectionStrings>
    <add name="_connection" connectionString="Server=localhost;Database=DBNAME;Trusted_Connection=True;" providerName="System.Data.SqlClient"  />
  </connectionStrings>
</configuration>

用法

public class MyDataService : BaseDataService
{
    public IList<Test> ReadTest()
    {
        IList<Test> testList = new List<Test>();
        DbCommand selectCommand = null;

        selectCommand = SqlDatabase.GetStoredProcCommand("[dbo].[CSP_Test_SelectAll]");

        using (DataSet result = SqlDatabase.ExecuteDataSet(selectCommand))
        {
            if (result.Tables[0].Rows.Count > 0)
            {
                DataTable dataTable = result.Tables[0];
                feesList = dataTable.ConvertTo<Test>();
            }
        }

        return testList;
    }
}

需要的包

<PackageReference Include="EnterpriseLibrary.Data.NetCore" Version="6.0.1313" />

编辑:

我浏览了你的代码,问题是获取配置值

public DatabaseConnection(IConfiguration configuration)
{
      string connectionString = configuration.GetConnectionString("DefaultConnection");
      sqlAdapter = new SqlDataAdapter();
      sqlConnection = new SqlConnection(connectionString);
}

【讨论】:

    【解决方案2】:

    这样使用

    Configuration.GetSection("ConnectionStrings").DefaultConnection
    

    【讨论】:

      猜你喜欢
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2010-12-14
      • 1970-01-01
      • 2017-07-21
      相关资源
      最近更新 更多