ホームページ  >  記事  >  バックエンド開発  >  ado.net とは何か、およびその簡単な実装の詳細

ado.net とは何か、およびその簡単な実装の詳細

伊谢尔伦
伊谢尔伦オリジナル
2017-05-31 14:32:273542ブラウズ

1. はじめに

Ado.netは、主にSqlConnection、SqlCommand、SqlDataReader、DataSetの5つのオブジェクトで構成されています

1。 SqlConnection クラス SQL サーバー データベースへの接続を表します

接続文字列の形式は一般に次の 2 つの形式があります。具体的なパラメーターについては、msdn

を参照してください 1) Persist Security Info=False;Integrated Security=true;Initial Catalog=。 Northwind;server=(local )

2) Server=.;Database=demodb;User=sa;Password=123;

以下のように接続を作成します

SqlConnectionconn =new平方接続 (connString );

2. SqlCommandクラスはデータベース実行コマンドオブジェクトを表します

1) SQLスクリプトまたはストアドプロシージャ、タイムアウト、パラメータ、および必要なトランザクションを設定するために使用されます。実行されました。

// ; " " " 3) いくつかの主なメソッド " " " 操作 utexeceExectEreader:クエリを実行してsqldatareaderオブジェクトを返します

culescalar:queryを実行して結果セットの最初の行と列を返すことがデータベースに接続されます。

SqlDataAdapter();

selectCommand);

string

selectCommandText, SqlConnection selectConnection);

mandText , string selectConnectionString); 4.SqlDataReader クラスは、データ フローのみで読み取る方法を提供します

5.DataSet クラスは、メモリ内のデータのキャッシュを表します 2. ADO.NET の単純な実装 以下は、追加、削除、変更と確認

public class EasySqlHelper
    {
        //web.config来配置
        //private static string connString = ConfigurationManager.AppSettings["SqlConnectionString"];
        private static string connString = "Server=.;Database=demodb;User=sa;Password=123;";

        public static int ExecuteNonQuery(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }

                    return cmd.ExecuteNonQuery();
                }
            }
        }

        public static SqlDataReader ExecuteReader(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlDataReader rdr = null;

            try
            {
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }

                rdr = cmd.ExecuteReader();
            }
            catch (SqlException ex)
            {
                conn.Dispose();
                cmd.Dispose();

                if (rdr != null)
                {
                    rdr.Dispose();
                }

                throw ex;
            }
            finally
            {
                cmd.Dispose();
            }

            return rdr;
        }

        public static DataTable ExecuteDataTable(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }

                    SqlDataAdapter adp = new SqlDataAdapter(cmd);
                    DataSet ds = new DataSet();
                    adp.Fill(ds);

                    return ds.Tables[0];
                }
            }
        }
    }
IDisposable インターフェースを実装するすべてのクラスは using を使用して解放でき、呼び出しメソッドで例外が発生した場合でも解放されます。物体。

3. さまざまなプロバイダーのデータ ソース クラス インスタンスを作成する

上記のコードは、Oracle などの別のデータベースを実装する場合にのみ有効であり、.Net が提供する別のコード セットを作成する必要があります。別のデータベース インスタンスを作成するための DbProviderFactory クラス。 同時に、上記の 5 つの主要なオブジェクトも DbConnection、DbCommand、DbDataReader、および DbDataAdapter に置き換えて、特定の SQL サーバー オブジェクトをより具体的でデータベースの種類に依存しないオブジェクトに抽象化する必要があります。

//// <summary>
    /// 连接信息
    /// </summary>
    public class ConnectionInfo
    {
        private string _connectionString;
        private string _providerName;

        /// <summary>
        /// 连接字符串
        /// </summary>
        public string ConnectionString
        {
            get { return _connectionString; }
        }

        /// <summary>
        /// 提供程序的固定名称
        /// </summary>
        public string ProviderName
        {
            get { return _providerName; }
        }

        public ConnectionInfo(string connectionString, string providerName)
        {
            _connectionString = connectionString;
            _providerName = providerName;
        }
    }

    public class MySqlHelper
    {
        private static DbProviderFactory dbProvider;

        private static readonly ConnectionInfo connInfo = new ConnectionInfo("Server=.;Database=demodb;User=sa;Password=123;", "System.Data.SqlClient");

        private static void GetProvider()
        {
            dbProvider = DbProviderFactories.GetFactory(connInfo.ProviderName);
        }

        static MySqlHelper()
        {
            GetProvider();
        }

        public static int ExecuteNonQuery(string sql, DbParameter[] parameters)
        {
            int flag = 0;

            using (DbConnection conn = dbProvider.CreateConnection())
            {
                conn.ConnectionString = connInfo.ConnectionString;
                conn.Open();

                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;

                    if (parameters != null && parameters.Length > 0)
                    {
                        cmd.Parameters.AddRange(parameters);
                    }

                    flag = cmd.ExecuteNonQuery();
                }
            }

            return flag;
        }

        public static void ExecuteReader(string sql, DbParameter[] parameters, Action<IDataReader> action)
        {
            IDataReader rdr = null;
            
            using (DbConnection conn = dbProvider.CreateConnection())
            {
                conn.ConnectionString = connInfo.ConnectionString;
                conn.Open();

                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;

                    if (parameters != null && parameters.Length > 0)
                    {
                        cmd.Parameters.AddRange(parameters);
                    }

                    rdr = cmd.ExecuteReader();

                    action(rdr);

                    rdr.Close();
                }
            }
        }

        public static DataTable ExecuteDataTable(string sql, DbParameter[] parameters)
        {
            DataTable dt = null;

            using (DbConnection conn = dbProvider.CreateConnection())
            {
                conn.ConnectionString = connInfo.ConnectionString;
                conn.Open();

                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;

                    if (parameters != null && parameters.Length > 0)
                    {
                        cmd.Parameters.AddRange(parameters);
                    }

                    IDataReader rdr = cmd.ExecuteReader();

                    dt = new DataTable();
                    dt.Load(rdr);

                    rdr.Close();
                    
                }

                return dt;
            }
        }
    }
4. その他のサードパーティフレームワーク Dapper、IBatis.Net などがあり、参照して学ぶことができます

【関連推奨事項】

1 ASP.NET の無料ビデオ。チュートリアル

2. Ado.Netを使用してExcelテーブルにデータを更新および追加するADO.NETのEXCEL実装コード((c#))

4.手順

5.

ado.net接続とデータベースコード


以上がado.net とは何か、およびその簡単な実装の詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。