programing

.NET Core에서 ADO.NET을 사용할 수 있습니까?

newsource 2023. 6. 9. 22:04

.NET Core에서 ADO.NET을 사용할 수 있습니까?

대부분의 튜토리얼은 Ado에 대한 언급이 없는 Entity Framework입니다.그물을 치다.NetCore 프로젝트."레거시" 데이터베이스가 있으므로 EF/"코드 우선" 접근 방식은 선택사항이 아닙니다.

ADO.NET 연결의 경우, 다음과 같습니다.System.Data.SqlClientASP.NET Core 프로젝트에 사용할 수 있습니까?

.NET Framework 프로젝트 템플릿을 사용할 때 사용할 수 있지만 .NET Core 프로젝트에서도 사용할 수 있습니까?

기존의SqlConnection그리고 다른 관련 연결은 여전히 내부에 존재합니다.System.Data.SqlClient네임스페이스이며 전체 프레임워크 또는 .NET Core를 사용하여 예상대로 작동해야 합니다.

다음과 같이 적절한 참조를 추가하고 설명을 사용하여 포함하기만 하면 됩니다.System.Data.SqlClient네임스페이스(아래 참조)project.json파일:

여기에 이미지 설명 입력

그런 다음 익숙한 구문을 사용하여 호출합니다.

using(var connection = new SqlConnection("{your-connection-string}"))
{
      // Do work here
}

따라서 기존 레거시 데이터베이스에 연결할 수 있는 유효한 연결 문자열만 있으면 됩니다.

ORM 사용 관련

또한 일부 사람들은 Entity Framework의 Micro-ORM 대체품인 Dapper를 사용하고 있는데, 이는 분명히 더 유연합니다.ADO.NET 대신 사용하면 장점이 있습니까?

이러한 ORM(객체 관계형 매핑기)은 데이터 리더를 통해 각 행을 반복적으로 분석하고 각 개체를 수동으로 구축하는 것이 아니라 기존 데이터베이스 데이터를 특정 클래스 및 개체에 보다 쉽게 매핑할 수 있는 유용하고 강력한 도구입니다.

성능 면에서는 궁극적으로 쿼리를 사용하여 수행할 작업에 달려 있습니다. ADO.NET은 일반적으로 데이터베이스에 대한 기본적인 연결이기 때문에 가장 빠릅니다. 그러나 일부 시나리오에서는 Dapper가 실제로 이를 능가할 수 있습니다.Entity Framework는 매우 유용하지만 일반적으로 ORM이 매우 크기 때문에 성능 면에서 뒤처집니다.

다시 한 번 말씀드리지만, 궁극적으로 여러분이 무엇을 하고 있는지에 따라 다르겠지만, 모두 실행 가능한 옵션입니다.

.NET Core 2.0에는 DataSet, DataTable 및 SQLDataAdapter가 있습니다. 답변을 https://blogs.msdn.microsoft.com/devfish/2017/05/15/exploring-datatable-and-sqldbadapter-in-asp-net-core-2-0/ 에서 확인하십시오.

아래 코드는 정상적으로 작동합니다.

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;
 }

Joe Healy가 DotNet Core 2.0의 답변에서 언급했듯이 모든 시스템을 사용할 수 있습니다.데이터 기능.

너겟 추가:

  • 마이크로소프트.내선 번호.배열
  • 마이크로소프트.내선 번호.배열.Json - Json에서 연결 문자열을 읽습니다.
  • 시스템. 데이터.흔한
  • 시스템. 데이터.SqlClient

config.json 예제:

{
  "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);
                }
            }
        }
    }
}

.NET Core에는 버전 2.0 이전의 DataSet, DataTable 및 관련 개체가 없습니다.그러나 2.0 이전 버전에서는 Connection, Command, Parameter, DataReader 및 기타 관련 개체와 같은 핵심 기능이 모두 포함되어 있습니다.

다음 호출을 사용하여 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;
    }
 }

자세한 내용과 예제는 다음 문서를 참조하십시오. http://www.ijz.today/2016/09/net-core-10-connecting-sql-server.html

ADO.NET Core에서는 시스템을 사용하지 않습니다.Data.SqlClient를 사용하지만 Microsoft를 사용합니다.Data.SqlClient.지금까지, 저는 이전 코딩을 모두 사용할 수 있었습니다!

Mr_LinDowsMac

그래도 EF를 사용할 수 있습니다.

scape-dbcontext라는 도구가 있습니다.

기존 데이터베이스 구조를 기반으로 "엔티티" 부분 클래스를 만듭니다.

다른 코드와 별도로 생성되는 "엔티티" 및 dbcontext 클래스의 관리를 고려해야 합니다.(이 도구는 기존 클래스를 재정의할 수 있습니다.)모델 프로젝트?

.net core에서 SQL SERVER 및 Oracle 프로젝트에 사용했습니다.

다른 패키지가 필요합니다.

  • SQL SERVER가 마이크로소프트 패키지를 선택하는 경우
  • Oracle이 Oracle 패키지를 선택한 경우(이전 .net Core 버전이라도 해당 패키지를 선택한 경우)

링크 보기

언급URL : https://stackoverflow.com/questions/38510740/is-ado-net-in-net-core-possible