IDbConnection
时间: 2023-08-20 11:09:42 浏览: 39
IDbConnection 是一个接口,它定义了与数据库连接相关的方法和属性。在 .NET 中,它是 ADO.NET 数据访问技术的一部分,用于与关系型数据库进行交互。
IDbConnection 接口提供了一些常见的方法,如 Open()、Close()、ExecuteNonQuery()、ExecuteScalar() 等,用于打开和关闭数据库连接,执行 SQL 命令并返回结果。它还定义了一些属性,例如 ConnectionString、State 等,用于管理连接字符串和获取连接的状态。
IDbConnection 是一个抽象接口,它的具体实现由各个数据库供应商提供。在使用时,可以根据具体的数据库类型选择适当的 IDbConnection 实现类,如 SqlConnection(用于 Microsoft SQL Server)、OracleConnection(用于 Oracle 数据库)等。
通过使用 IDbConnection 接口,开发人员可以编写与特定数据库无关的代码,从而提高代码的可维护性和可移植性。
相关问题
c#封装数据库连接池
以下是一个简单的C#数据库连接池的封装示例:
```csharp
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
namespace ConnectionPoolDemo
{
public class ConnectionPool
{
private readonly string _connectionString;
private readonly Stack<IDbConnection> _pool;
public ConnectionPool(string connectionString, int poolSize)
{
_connectionString = connectionString;
_pool = new Stack<IDbConnection>(poolSize);
for (int i = 0; i < poolSize; i++)
{
IDbConnection connection = new SqlConnection(_connectionString);
connection.Open();
_pool.Push(connection);
}
}
public IDbConnection GetConnection()
{
if (_pool.Count > 0)
{
return _pool.Pop();
}
else
{
IDbConnection connection = new SqlConnection(_connectionString);
connection.Open();
return connection;
}
}
public void ReleaseConnection(IDbConnection connection)
{
if (connection != null)
{
_pool.Push(connection);
}
}
}
public class DataAccess
{
private readonly ConnectionPool _connectionPool;
public DataAccess(string connectionString, int poolSize)
{
_connectionPool = new ConnectionPool(connectionString, poolSize);
}
public void ExecuteNonQuery(string commandText, IDictionary<string, object> parameters)
{
using (IDbConnection connection = _connectionPool.GetConnection())
{
using (IDbCommand command = connection.CreateCommand())
{
command.CommandText = commandText;
foreach (KeyValuePair<string, object> parameter in parameters)
{
IDbDataParameter dataParameter = command.CreateParameter();
dataParameter.ParameterName = parameter.Key;
dataParameter.Value = parameter.Value;
command.Parameters.Add(dataParameter);
}
command.ExecuteNonQuery();
}
}
}
public object ExecuteScalar(string commandText, IDictionary<string, object> parameters)
{
using (IDbConnection connection = _connectionPool.GetConnection())
{
using (IDbCommand command = connection.CreateCommand())
{
command.CommandText = commandText;
foreach (KeyValuePair<string, object> parameter in parameters)
{
IDbDataParameter dataParameter = command.CreateParameter();
dataParameter.ParameterName = parameter.Key;
dataParameter.Value = parameter.Value;
command.Parameters.Add(dataParameter);
}
return command.ExecuteScalar();
}
}
}
public DataTable ExecuteDataTable(string commandText, IDictionary<string, object> parameters)
{
using (IDbConnection connection = _connectionPool.GetConnection())
{
using (IDbCommand command = connection.CreateCommand())
{
command.CommandText = commandText;
foreach (KeyValuePair<string, object> parameter in parameters)
{
IDbDataParameter dataParameter = command.CreateParameter();
dataParameter.ParameterName = parameter.Key;
dataParameter.Value = parameter.Value;
command.Parameters.Add(dataParameter);
}
using (IDataReader reader = command.ExecuteReader())
{
DataTable dataTable = new DataTable();
dataTable.Load(reader);
return dataTable;
}
}
}
}
}
}
```
使用示例:
```csharp
using System;
using System.Collections.Generic;
using System.Data;
namespace ConnectionPoolDemo
{
class Program
{
static void Main(string[] args)
{
string connectionString = "Data Source=(local);Initial Catalog=TestDB;Integrated Security=True";
int poolSize = 10;
DataAccess dataAccess = new DataAccess(connectionString, poolSize);
// 执行查询
string query = "SELECT * FROM Users WHERE Age > @age";
IDictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("@age", 18);
DataTable dataTable = dataAccess.ExecuteDataTable(query, parameters);
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine("{0} - {1}", row["Name"], row["Age"]);
}
// 执行插入
string insert = "INSERT INTO Users (Name, Age) VALUES (@name, @age)";
parameters = new Dictionary<string, object>();
parameters.Add("@name", "Tom");
parameters.Add("@age", 20);
dataAccess.ExecuteNonQuery(insert, parameters);
// 执行更新
string update = "UPDATE Users SET Age = @age WHERE Name = @name";
parameters = new Dictionary<string, object>();
parameters.Add("@name", "Tom");
parameters.Add("@age", 21);
dataAccess.ExecuteNonQuery(update, parameters);
// 执行删除
string delete = "DELETE FROM Users WHERE Name = @name";
parameters = new Dictionary<string, object>();
parameters.Add("@name", "Tom");
dataAccess.ExecuteNonQuery(delete, parameters);
// 释放连接
IDbConnection connection = dataAccess.GetConnection();
dataAccess.ReleaseConnection(connection);
}
}
}
```
.net core怎样用配置来实现链接数据库并且搭配ado.net来实现
在 .NET Core 中,可以使用配置文件来存储数据库连接字符串,然后使用 ADO.NET 来实现连接数据库。
首先,需要在项目中添加 Microsoft.Extensions.Configuration 和 Microsoft.Extensions.Configuration.Json 包。
然后,在 appsettings.json 文件中添加以下内容:
```
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=mydatabase;User Id=myuser;Password=mypassword;"
}
}
```
这里我们定义了一个名为 DefaultConnection 的连接字符串,它连接到本地的 mydatabase 数据库,并使用 myuser 和 mypassword 进行身份验证。
接下来,在 Startup.cs 文件中,可以使用以下代码将配置文件加载到应用程序中:
```
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
string connectionString = Configuration.GetConnectionString("DefaultConnection");
services.AddTransient<IDbConnection>((sp) => new SqlConnection(connectionString));
}
```
在这里,我们将配置文件中的 DefaultConnection 连接字符串加载到 services 中,并使用 IDbConnection 接口将其注入到服务容器中。
现在,可以在需要使用数据库连接的地方注入 IDbConnection 接口,并使用 ADO.NET 连接到数据库,例如:
```
public class MyController : Controller
{
private readonly IDbConnection _dbConnection;
public MyController(IDbConnection dbConnection)
{
_dbConnection = dbConnection;
}
public IActionResult Index()
{
var query = "SELECT * FROM MyTable";
var command = new SqlCommand(query, (SqlConnection)_dbConnection);
var reader = command.ExecuteReader();
// Do something with the data
return View();
}
}
```
在这里,我们注入了 IDbConnection 接口,并创建了一个查询,使用 ADO.NET 执行查询,并处理查询结果。
以上就是使用配置文件和 ADO.NET 在 .NET Core 中连接到数据库的示例。