ASP.NET Core连接字符串简介

内容纲要

ASP.NET Core连接字符串简介

ASP.NET Core连接字符串主要用于连接数据库,它可以存储在appsetting.json中。大多数数据库供应商都需要某种类型的连接字符串来建立数据库连接。连接字符串包含需要最安全的感知信息。要改变连接字符串,我们需要在生产、开发和测试环境之间移动应用程序。

ASP.NET核心连接字符串概述

ASP.NET Core配置系统特别有弹性,其中连接字符串存储在appsettigs.json中,用户存储秘密,环境变量,以及配置源。

如何管理ASP.NET Core的连接字符串

在ASP.NET Core中,我们不需要使用Web.config文件,我们需要使用其他方法,它们如下。

硬编码连接字符串

最初,在startup.cs文件中硬编码连接字符串,如下所示。

var _conString = @"Data Source=ATIQ;Initial Catalog=UserDB;Integrated Security=False;Persist Security Info=False;
User ID=sa;Password=******";
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(connection));
Connection String from the appSetting.json
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

这里的默认连接是在应用程序的根目录appSetting.json中定义的

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection":
"DATA SOURCE=xxx\\SQLEXPRESS;DATABASE=xxx;UID=sa;PWD=xxx"
}
}

来自dataSetting.json的连接字符串--它是自定义的JSON文件

下一个方法是,从JSON自定义方法中获得连接字符串,并去序列化以获得连接字符串的值,如下所示。

var _settings = new DataSettingsManager().LoadSettings();
var _connection = _settings.DataConnectionString.ToString(); services.AddDbContext<MyDbContext>(options => options.UseSqlServer(_connection));

这里MyDbContext是数据上下文,而DataSettingsManager是另一个类,用于在对象DataSettings中存储连接字符串的序列化值。让我们看看下面的代码,如下。

public class MyDbContext: DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options)
{ }
public DbSet<MyUser> MyUser { get; set; }
}
public class DataSettingsManager
{
private const string _dataSettingsFilePath = "App_Data/dataSettings.json";
public virtual DataSettings LoadSettings()
{
var text = File.ReadAllText(_dataSettingsFilePath);
if (string.IsNullOrEmpty(text))
return new DataSettings();
//here we getting the data setting from the JSON File
DataSettings settings = JsonConvert.DeserializeObject<DataSettings>(text);
return settings;
}
}
public class DataSettings
{
public string DataConnectionString { get; set; }
}

为了在根目录下创建以 "App_Data "命名的文件夹,并以 "dataSetting.json "建立JSON文件,下面的代码如下。

{
"DataConnectionString": "Data Source=ATIQ;Initial Catalog=UserDB;Integrated Security=False;
Persist Security Info=False;User ID=sa;Password=******"
}

ASP.NET Core连接字符串的配置

在ASP.NET Core Web应用程序中,appSettings.json是这里使用的配置文件。它的主要目的是用来存储到数据库的连接字符串。然而,它也被用来存储各种其他设置,我们可以在我们的应用程序中使用。
在ASP.NET Core中有几个配置提供者;配置提供者从几个配置源中读取配置数据,如键值对;让我们看看以下方法。

- 环境变量
- appSetting.json,设置文件
- 命令行参数
- Azure Key Vault
- Azure App Configuration
- 目录文件
- 自定义提供者,创建/安装
- .NET的内存中对象

上述主题给出了关于ASP.NET Core中的配置信息。

ASP.NET Core连接字符串网络应用程序

让我们看看ASP.NET Core中的一个web应用程序的例子,确保在NuGet中安装所需的包,我们需要使用
System.Data.SqlClient


我们的appSetting.json字符串将如下所示。

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"ConnectionString":
"DATA SOURCE=xxx\\SQLEXPRESS;DATABASE=xxx;UID=sa;PWD=xxx"
}
}

我们要求在Startup.cs文件中添加一些,如下。

public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddSingleton<IConfiguration>(Configuration);
}

我们还添加了,

services.AddSingleton<IConfiguration>(Configuration);

让我们创建数据库类,最初在解决方案资源管理器中创建Models类,然后创建名为Measurement.cs的类,最后是用于从数据库检索数据的代码。下面的代码是这样的。

using System.Data.SqlClient;
namespace MeasurementApp.Model
{
public class Measurement
{
public int Msmt_Id { get; set; }
public string Msmt_Name { get; set; }
public string Msmt_Unit { get; set; }
public List<Measurement> Get_MeasurmentParameters(string connectionString)
{
List<Measurement> msmt_List = new List<Measurement>();
SqlConnection con = new SqlConnection(connectionString);
string sqlQuery = "select Msmt_Id, Msmt_Name, Msmt_Unit from MEASUREMENT";
con.Open();
SqlCommand cmd = new SqlCommand(sqlQuery, con);
SqlDataReader dr = cmd.ExecuteReader();
if (dr != null)
{
while (dr.Read())
{
Measurement _msmtParameter = new Measurement();
_msmtParameter.Msmt_Id = Convert.ToInt32(dr["Msmt_Id"]);
_msmtParameter.Msmt_Name = dr["Msmt_Name"].ToString();
_msmtParameter.Msmt_Unit = dr["Msmt_Unit"].ToString();
msmt_List.Add(_msmtParameter);
}
}
return msmt_List;
}
}
}

这个ASP.NET Core网页包含两个代码:"Database.cshtml "和 "Database.cshtml.cs"。让我们看看下面的两段代码。

Database.cshtml.cs
using Microsoft.Extensions.Configuration;
using AppSettingsApp.Models;
namespace AppSettingsApp.Pages
{
public class DatabaseModel : PageModel
{
readonly IConfiguration _configuration;
public List<Measurement> measurementParameterList = new List<Measurement>();
public string connectionString;
public DatabaseModel(IConfiguration configuration)
{
_configuration = configuration;
}
public void OnGet()
{
GetData();
}
void GetData()
{
Measurement _msmt = new Measurement();
connectionString = _configuration.GetConnectionString("ConnectionString");
measurementParameterList = _msmt.Get_MeasurmentParameters(connectionString);
}
}
}
Database.cshtml
<div>
<h1>Measurement Parameters</h1>
Below you see all the Measurement Names registered in the Database:
<table class="table">
<thead>
<tr>
<th>MeasurementId</th>
<th>Measurement Name</th>
<th>Unit</th>
</tr>
</thead>
<tbody>
@foreach (var measurement in Model.msmt_List)
{
<tr>
<td> @measurement.Msmt_Id</td>
<td> @measurement.Msmt_Name</td>
<td> @measurement.Msmt_Unit</td>
</tr>
}
</tbody>
</table>
</div>

ASP.NET核心连接字符串示例

在这个例子中,我们将使用SQL Server作为我们的数据库。

CREATE TABLE [MEASUREMENT] (
[Msmt_Id] int NOT NULL IDENTITY ( 1,1 ) Primary Key,
[Msmt_Name] varchar(100) NOT NULL UNIQUE,
[Msmt_Unit] varchar(50) NULL
)
Go

一旦创建了表,为了检索数据,根据测量表的属性手动添加/输入数据。
startup.cs文件中的连接字符串,如下所示。

var _conString = @"Data Source=ATIQ;Initial Catalog=UserDB;Integrated Security=False;Persist Security Info=False;
User ID=sa;Password=******";

结语

在这篇文章中,我们看到了ASP.NET Core的连接字符串,其主要目的是存储到数据库的连接字符串,它也被用来存储各种其他设置,我们可以在我们的应用程序中使用。我希望这篇文章能帮助你了解连接字符串的用途和各种使用方法。

作者:迪鲁宾
链接:https://juejin.cn/post/7117626434922905631

给TA打赏
共{{data.count}}人
人已打赏
.Net Core

ASP.NET Core技术内幕与项目实战 ——基于DDD与前后端分离【杨中科最新力作】

2022-6-29 19:22:49

.Net Core

ASP.NET PostBack介绍及应用

2022-7-15 20:05:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索