【ASP.NET開発】ASP.SQLServerに対するNETの汎用データベースアクセスクラス

10238 ワード

何というか、プログラマーとして、私たちは明日新しい知識を学ぶべきです.
以前、私はデータベースを操作するときに同じページでデータベースを操作していました.これにより、操作が煩雑になり、データベース操作のコードを繰り返し書く必要があり、多くの時間を浪費するだけでなく、コードが非常に乱れているように見えます.三層アーキテクチャに触れたという考え方から,階層化のメリット,また対象向けのメリットが分かった.今日本を読む时、周金橋先生のデータベースへのアクセスの共通クラスを見て、真似して1つ書いてみました.コードがはっきりしていて、しかも実用的で、データベースに対するすべてのよく使われる操作を含めています.
 /// <summary>
    ///         
    /// </summary>
    public class SqlHelper
    {
        private string connectionString;

        /// <summary>
        ///           
        /// </summary>
        public string ConnectionString
        {
            
            set { connectionString = value; }
        }

        /// <summary>
        ///     
        /// </summary>
        /// <param name="connectionString">        </param>
        public SqlHelper(string connectionString)
        {
            this.connectionString = connectionString;
        }

        /// <summary>
        ///       ,       
        /// </summary>
        /// <param name="sql">    sql  </param>
        /// <param name="commandType">           ,       sql    </param>
        /// <returns>       </returns>
        public DataTable ExecuteDataTable(string sql,CommandType commandType)
        {
            return ExecuteDataTable(sql, commandType, null);
        }

        /// <summary>
        ///       ,      
        /// </summary>
        /// <param name="sql">    sql    </param>
        /// <returns>        </returns>
        public DataTable ExecuteDataTable(string sql)
        {
            return ExecuteDataTable(sql, CommandType.Text, null);
        }


        /// <summary>
        ///       ,       
        /// </summary>
        /// <param name="sql">    sql  </param>
        /// <param name="commandtype">          ,       sql    </param>
        /// <param name="parameters">Transact-SQL            </param>
        /// <returns></returns>
        public DataTable ExecuteDataTable(string sql, CommandType commandtype, SqlParameter[] parameters)
        {
            DataTable data = new DataTable(); //   datatable,         
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand(sql, con))
                {
                    cmd.CommandType = commandtype;//  command commandType    Commandtype
                    //         ,       
                    if (parameters != null)
                    {
                        foreach (SqlParameter parameter in parameters)
                        {
                            cmd.Parameters.Add(parameter);
                        }
                    }

                    //      sql sqlcommand      sqldataadapter
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(data);//  datatable

                }
            }
            return data;
        }

        /// <summary>
        ///     SqlDataReader     
        /// </summary>
        /// <param name="sql">    SQl    </param>
        /// <returns></returns>
        public SqlDataReader ExecuteReader(string sql)
        {
            return ExecuteReader(sql, CommandType.Text, null);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql">    sql  </param>
        /// <param name="commandType">          ,       SQl    </param>
        /// <returns></returns>
        public SqlDataReader ExecuteReader(string sql,CommandType commandType)
        {
            return ExecuteReader(sql, commandType, null);
        }

        /// <summary>
        ///     sqldatareader     
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="commandType"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters)
        {
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand(sql, con);

            if (parameters != null)
            {
                foreach (SqlParameter parameter in parameters)
                {
                    cmd.Parameters.Add(parameters);
                }
            }
            con.Open();
            //CommandBehavior.CloseConnection      reader          Connection  
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }

        /// <summary>
        ///       ,          。     ,   
        /// </summary>
        /// <param name="sql">    SQl  </param>
        /// <returns></returns>
        public Object ExecuteScalar(string sql)
        {
            return ExecuteScalar(sql, CommandType.Text, null);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="commandType"></param>
        /// <returns></returns>
        public Object ExecuteScalar(string sql, CommandType commandType)
        {
            return ExecuteScalar(sql, commandType, null);
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="commandType">    </param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public Object ExecuteScalar(string sql,CommandType commandType, SqlParameter[] parameters)
        {
            Object result=null;
            SqlConnection con=new SqlConnection(connectionString);
            SqlCommand cmd=new SqlCommand(sql,con);
            cmd.CommandType= commandType;
            if(parameters!=null)
            {
                foreach (SqlParameter parapmeter in parameters)
                {
                    cmd.Parameters.Add(parapmeter);
                }
            }

            con.Open();
            result=cmd.ExecuteScalar();
            con.Close();
            return result;
        }

        /// <summary>
        ///             
        /// </summary>
        /// <param name="sql">    sql  </param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sql)
        {
            return ExecuteNonQuery(sql, CommandType.Text, null);
        }

        /// <summary>
        ///            
        /// </summary>
        /// <param name="sql">         sql  </param>
        /// <param name="commandType">          ,       sql    </param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sql, CommandType commandType)
        {
            return ExecuteNonQuery(sql, commandType, null);
        }

        /// <summary>
        ///             
        /// </summary>
        /// <param name="sql">    sql  </param>
        /// <param name="commandType">          ,       sql    </param>
        /// <param name="parameters">Transact-SQL             </param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)
        {
            int count = 0;
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.CommandType = commandType;
            if (parameters != null)
            {
                foreach(SqlParameter parameter in parameters)
                {
                    cmd.Parameters.Add(parameter);
                }
            }

            con.Open();
            count = cmd.ExecuteNonQuery();
            con.Close();
            return count;
        }

        /// <summary>
        ///                      
        /// </summary>
        /// <returns></returns>
        public DataTable GetTables()
        {
            DataTable table = null;
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                con.Open();
                table = con.GetSchema("Tables");

            }
            return table;
        }
    }

  
データベースにアクセスする汎用クラスを構築した後、データベースに従って操作する場合は、オブジェクトをインスタンス化し、必要に応じて適切なメソッドを呼び出すだけで、データベースに対するすべての操作を完了できます.これが、データベース・アクセス・レイヤとビジネス・ロジック・レイヤの分離のメリットです.
このように書かれたコードは、私たちのコードの複雑さを大幅に減らすことができます.また、煩雑さも大幅に低下しています.