Asp.net 在.NET内核中是否可以使用ADO.NET?
我想使用最新版本的ASP.NET Core,因为我想用它创建一组Web API。然而,我发现的教程主要关注实体框架。我不能使用它,因为我已经有一个“遗留”数据库,所以代码优先的方法不是一个选项Asp.net 在.NET内核中是否可以使用ADO.NET?,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我想使用最新版本的ASP.NET Core,因为我想用它创建一组Web API。然而,我发现的教程主要关注实体框架。我不能使用它,因为我已经有一个“遗留”数据库,所以代码优先的方法不是一个选项 我的想法是使用ADO.NET连接到我的数据库,但是我不知道ASP.NET核心项目中是否有System.Data.SqlClient。当我使用.NET Framework项目模板时,我已经发现它是可用的,但是它在.NET核心项目中仍然可用吗?现有的SqlConnection和其他相关连接仍然存在于Syste
我的想法是使用ADO.NET连接到我的数据库,但是我不知道ASP.NET核心项目中是否有
System.Data.SqlClient
。当我使用.NET Framework项目模板时,我已经发现它是可用的,但是它在.NET核心项目中仍然可用吗?现有的SqlConnection
和其他相关连接仍然存在于System.Data.SqlClient
命名空间中,并且应该使用完整的Framework或.NET核心按照预期工作
您只需添加适当的引用,并使用语句将其包括在内,例如通过System.Data.SqlClient
命名空间,如下所示,在project.json
文件中:
然后通过您习惯的语法调用它:
using(var connection = new SqlConnection("{your-connection-string}"))
{
// Do work here
}
因此,只要您有一个有效的连接字符串来连接到现有的遗留数据库,您就应该可以了
关于ORM的使用
我还发现有些人正在使用一种微型ORM,Dapper
替代实体框架,显然更加灵活。就在那里
使用它代替ADO.NET有什么好处吗
这些ORM(对象关系映射器)是方便且通常功能强大的工具,可以更轻松地将现有数据库数据映射到特定的类和对象,从而使它们更易于使用(而不是通过数据读取器进行迭代、解析每一行并手动构建每个对象)
就性能而言,它最终取决于您将对查询执行什么操作。ADO.NET通常是最快的,因为它是到数据库的基本连接,但是在某些情况下,Dapper实际上可以击败它。实体框架虽然非常有用,但通常在性能上落后,这仅仅是因为它是一个如此大的ORM
再次强调-这最终取决于您正在做什么,但所有选项都是可行的。需要注意的是,.NET Core在2.0版之前没有DataSet、DataTable和相关对象。但在2.0之前,它拥有连接、命令、参数、数据读取器和其他相关对象等所有核心功能 您可以使用以下调用简化通过SQL Server数据库提供程序与SQL Server的连接
public class BaseDataAccess
{
protected string ConnectionString { get; set; }
public BaseDataAccess()
{
}
public BaseDataAccess(string connectionString)
{
this.ConnectionString = connectionString;
}
private SqlConnection GetConnection()
{
SqlConnection connection = new SqlConnection(this.ConnectionString);
if (connection.State != ConnectionState.Open)
connection.Open();
return connection;
}
protected DbCommand GetCommand(DbConnection connection, string commandText, CommandType commandType)
{
SqlCommand command = new SqlCommand(commandText, connection as SqlConnection);
command.CommandType = commandType;
return command;
}
protected SqlParameter GetParameter(string parameter, object value)
{
SqlParameter parameterObject = new SqlParameter(parameter, value != null ? value : DBNull.Value);
parameterObject.Direction = ParameterDirection.Input;
return parameterObject;
}
protected SqlParameter GetParameterOut(string parameter, SqlDbType type, object value = null, ParameterDirection parameterDirection = ParameterDirection.InputOutput)
{
SqlParameter parameterObject = new SqlParameter(parameter, type); ;
if (type == SqlDbType.NVarChar || type == SqlDbType.VarChar || type == SqlDbType.NText || type == SqlDbType.Text)
{
parameterObject.Size = -1;
}
parameterObject.Direction = parameterDirection;
if (value != null)
{
parameterObject.Value = value;
}
else
{
parameterObject.Value = DBNull.Value;
}
return parameterObject;
}
protected int ExecuteNonQuery(string procedureName, List<DbParameter> parameters, CommandType commandType = CommandType.StoredProcedure)
{
int returnValue = -1;
try
{
using (SqlConnection connection = this.GetConnection())
{
DbCommand cmd = this.GetCommand(connection, procedureName, commandType);
if (parameters != null && parameters.Count > 0)
{
cmd.Parameters.AddRange(parameters.ToArray());
}
returnValue = cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
//LogException("Failed to ExecuteNonQuery for " + procedureName, ex, parameters);
throw;
}
return returnValue;
}
protected object ExecuteScalar(string procedureName, List<SqlParameter> parameters)
{
object returnValue = null;
try
{
using (DbConnection connection = this.GetConnection())
{
DbCommand cmd = this.GetCommand(connection, procedureName, CommandType.StoredProcedure);
if (parameters != null && parameters.Count > 0)
{
cmd.Parameters.AddRange(parameters.ToArray());
}
returnValue = cmd.ExecuteScalar();
}
}
catch (Exception ex)
{
//LogException("Failed to ExecuteScalar for " + procedureName, ex, parameters);
throw;
}
return returnValue;
}
protected DbDataReader GetDataReader(string procedureName, List<DbParameter> parameters, CommandType commandType = CommandType.StoredProcedure)
{
DbDataReader ds;
try
{
DbConnection connection = this.GetConnection();
{
DbCommand cmd = this.GetCommand(connection, procedureName, commandType);
if (parameters != null && parameters.Count > 0)
{
cmd.Parameters.AddRange(parameters.ToArray());
}
ds = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
catch (Exception ex)
{
//LogException("Failed to GetDataReader for " + procedureName, ex, parameters);
throw;
}
return ds;
}
}
公共类BaseDataAccess
{
受保护的字符串连接字符串{get;set;}
公共BaseDataAccess()
{
}
公共BaseDataAccess(字符串连接字符串)
{
this.ConnectionString=ConnectionString;
}
私有SqlConnection GetConnection()
{
SqlConnection=newsqlconnection(this.ConnectionString);
if(connection.State!=ConnectionState.Open)
connection.Open();
回路连接;
}
受保护的DbCommand GetCommand(DbConnection连接、字符串commandText、CommandType CommandType)
{
SqlCommand=newsqlcommand(commandText,连接为SqlConnection);
command.CommandType=CommandType;
返回命令;
}
受保护的SqlParameter GetParameter(字符串参数、对象值)
{
SqlParameterObject=新的SqlParameter(参数,值!=null?值:DBNull.value);
parameterObject.Direction=ParameterDirection.Input;
返回参数对象;
}
受保护的SqlParameterGetParameterOut(字符串参数,SqlDbType类型,对象值=null,ParameterDirection ParameterDirection=ParameterDirection.InputOutput)
{
SqlParameterObject=新的SqlParameter(参数,类型);
if(type==SqlDbType.NVarChar | | type==SqlDbType.VarChar | | type==SqlDbType.NText | | type==SqlDbType.Text)
{
parameterObject.Size=-1;
}
parameterObject.Direction=parameterDirection;
if(值!=null)
{
parameterObject.Value=Value;
}
其他的
{
parameterObject.Value=DBNull.Value;
}
返回参数对象;
}
受保护的int ExecuteOnQuery(字符串过程重命名,列表参数,CommandType CommandType=CommandType.StoredProcess)
{
int returnValue=-1;
尝试
{
使用(SqlConnection=this.GetConnection())
{
DbCommand cmd=this.GetCommand(连接、过程重命名、命令类型);
if(parameters!=null&¶meters.Count>0)
{
cmd.Parameters.AddRange(Parameters.ToArray());
}
returnValue=cmd.ExecuteNonQuery();
}
}
捕获(例外情况除外)
{
//LogException(“无法执行”+procedureName,ex,parameters的ExecuteNonQuery);
投掷;
}
返回值;
}
受保护对象ExecuteScalar(字符串过程重命名,列出参数)
{
对象返回值=null;
尝试
{
使用(DbConnection=this.GetConnection())
{
DbCommand cmd=this.GetCommand(连接、过程重命名、CommandType.StoredProcedure);
if(parameters!=null&¶meters.Count>0)
{
cmd.Parameters.AddRange(Parameters.ToArray());
}
returnValue=cmd.ExecuteScalar();
}
}
捕获(例外情况除外)
{
//LogException(“未能为“+procedureName,ex,parameters”执行Calar);
投掷;
}
返回值;
}
受保护的DbDataReader GetDataReader(字符串过程重命名、列表参数、CommandType CommandType
public static DataTable ExecuteDataTableSqlDA(SqlConnection conn, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
System.Data.DataTable dt = new DataTable();
System.Data.SqlClient.SqlDataAdapter da = new SqlDataAdapter(cmdText, conn);
da.Fill(dt);
return dt;
}
{
"connectionString": "your-db-connection-settings"
}
class Program
{
static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("config.json", false)
.Build();
var connectionString = configuration.GetSection("connectionString").Value;
if(string.IsNullOrEmpty(connectionString))
throw new ArgumentException("No connection string in config.json");
using (var conn = new SqlConnection(connectionString))
{
var sql = "SELECT * FROM ExampleTable";
using (var cmd = new SqlCommand(sql, conn))
{
using (var adapter = new SqlDataAdapter(cmd))
{
var resultTable = new DataTable();
adapter.Fill(resultTable);
}
}
}
}
}