Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在.NET内核中是否可以使用ADO.NET?_Asp.net_Asp.net Mvc - Fatal编程技术网

Asp.net 在.NET内核中是否可以使用ADO.NET?

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

我想使用最新版本的ASP.NET Core,因为我想用它创建一组Web API。然而,我发现的教程主要关注实体框架。我不能使用它,因为我已经有一个“遗留”数据库,所以代码优先的方法不是一个选项


我的想法是使用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);
                }
            }
        }
    }
}