SqlController




//
---------------------------------------------------------------- // <copyright file="SqlController.cs" company="Microsoft"> // Copyright (c) Microsoft Corporation. All rights reserved. // </copyright> //---------------------------------------------------------------- namespace QuickAnswer { using System; using System.Collections; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Xml; /// <summary> /// DBアクセス SQLの実行クラス /// </summary> public sealed class SqlController : IDisposable { /// <summary> /// コネクション オブジェクト /// </summary> private SqlConnection sqlConnection; /// <summary> /// トランザクション オブジェクト /// </summary> private SqlTransaction sqlTransaction; /// <summary> /// Reader 保持フィールド. /// </summary> private ArrayList readers = new ArrayList(); /// <summary> /// SqlCommandTimeout Field /// </summary> private int? commandTimeout = null; /// <summary> /// Initializes a new instance of the SqlController class /// </summary> /// <param name="connectionString">Database 接続文字列</param> public SqlController(string connectionString) { this.sqlConnection = new SqlConnection(); this.sqlConnection.ConnectionString = connectionString; this.sqlConnection.Open(); } /// <summary> /// Gets or sets SqlCommandのタイムアウト時間 /// </summary> public int? SqlCommandTimeOut { get { return this.commandTimeout; } set { this.commandTimeout = value; } } /// <summary> /// トランザクション の開始 /// </summary> /// <returns>SqlTransaction オブジェクト</returns> public SqlTransaction BeginTransaction() { this.sqlTransaction = this.sqlConnection.BeginTransaction(); return this.sqlTransaction; } /// <summary> /// SQLを実行し、 DBからデータを取得. /// </summary> /// <param name="sqlCommand">SQL Command Class</param> /// <param name="sqlParameters">埋め込み パラメータ一覧</param> /// <param name="commandType">SqlCommandType Text or StoredProcedure</param> /// <returns>SqlDataReader の返却</returns> public SqlDataReader ExecuteReader( SqlCommand sqlCommand) { SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); this.readers.Add(sqlDataReader); return sqlDataReader; } /// <summary> /// SQLを実行し、DBからデータを取得. /// 1行1列目の値を返します。結果セットの行が0行の場合、nullを返します。 /// </summary> /// <param name="sqlCommand">SQL Command Class</param> /// <param name="sqlParameters">埋め込み パラメータ一覧</param> /// <param name="commandType">SqlCommandType Text or StoredProcedure</param> /// <returns>1行1列目 の値を取得する</returns> public static object ExecuteScalar( SqlCommand sqlCommand) { using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader()) { if (!sqlDataReader.HasRows) { return null; } sqlDataReader.Read(); return sqlDataReader[0]; } } /// <summary> /// SQLを実行し、DBからデータを取得. /// 結果セットが存在しない場合は、空のDataTableを返却します. /// </summary> /// <param name="sqlCommand">SQL Command Class</param> /// <param name="sqlParameters">埋め込み パラメータ一覧</param> /// <param name="commandType">SqlCommandType Text or StoredProcedure</param> /// <returns>DataTable を返却する</returns> public DataTable ExecuteDataTable( SqlCommand sqlCommand) { SqlDataReader sqlDataReader = this.ExecuteReader(sqlCommand); DataTable dt = new DataTable(); if (sqlDataReader.HasRows) { dt.Load(sqlDataReader); } return dt; } /// <summary> /// SQLを実行し、DBからデータを取得. /// 結果セットが存在しない場合は、空のDataSetを返却します. /// </summary> /// <param name="sqlCommand">SQL Command Class</param> /// <param name="sqlParameters">埋め込み パラメータ一覧</param> /// <param name="commandType">SqlCommandType Text or StoredProcedure</param> /// <returns>DataSet を返却する</returns> public static DataSet ExecuteDataSet( SqlCommand sqlCommand) { using (SqlDataAdapter adapter = new SqlDataAdapter(sqlCommand)) { DataSet ds = new DataSet(); adapter.Fill(ds); return ds; } } /// <summary> /// SQLを実行し、 XML形式のデータを取得. /// </summary> /// <param name="sqlCommand">SQL Command Class</param> /// <param name="sqlParameters">埋め込み パラメータ一覧</param> /// <param name="commandType">SqlCommandType Text or StoredProcedure</param> /// <returns>XmlReader を返却する</returns> public XmlReader ExecuteXmlReader( SqlCommand sqlCommand) { XmlReader xmlReader = sqlCommand.ExecuteXmlReader(); this.readers.Add(xmlReader); return xmlReader; } /// <summary> /// Execute Non Queryを実行する. /// </summary> /// <param name="sqlCommand">SQL Command Class</param> /// <param name="sqlParameters">埋め込み パラメータ一覧</param> /// <param name="commandType">SqlCommandType Text or StoredProcedure</param> /// <returns>影響を受けた行数の カウント</returns> public static int ExecuteNonQuery( DbCommand sqlCommand) { return sqlCommand.ExecuteNonQuery(); } /// <summary> /// リソース の解放を行う. /// </summary> public void Dispose() { // ReaderのClose. for (IEnumerator ie = this.readers.GetEnumerator(); ie.MoveNext();) { if (ie.Current is SqlDataReader) { ((SqlDataReader)ie.Current).Close(); } if (ie.Current is XmlReader) { ((XmlReader)ie.Current).Close(); } } this.readers = new ArrayList(); // Transactionの破棄. if (this.sqlTransaction != null) { this.sqlTransaction.Dispose(); this.sqlTransaction = null; } // Connectionの返却. if (this.sqlConnection != null) { this.sqlConnection.Close(); this.sqlConnection = null; } } /// <summary> /// SqlCommand の生成. /// </summary> /// <param name="sqlParameters">埋め込み パラメータ一覧</param> /// <returns>SqlCommand の返却</returns> public SqlCommand GetSqlCommand( SqlParameter[] sqlParameters) { // SqlCommandの生成 SqlCommand sqlCommand = new SqlCommand(); sqlCommand.CommandType = CommandType.StoredProcedure; //sqlCommand.CommandText = commandText; sqlCommand.Connection = this.sqlConnection; if (this.commandTimeout != null) { sqlCommand.CommandTimeout = (int)this.commandTimeout; } if (this.sqlTransaction != null) { sqlCommand.Transaction = this.sqlTransaction; } if (sqlParameters != null) { foreach (SqlParameter sqlParameter in sqlParameters) { sqlCommand.Parameters.Add(sqlParameter); } } return sqlCommand; } } }

调用:

  

 using (SqlController sqlCon = new SqlController(strConn))
                {
                    // パラメーターを設定
                    SqlParameter[] sqlParameter = 
                                            {
                                              new SqlParameter("@PrmBrand", brand),
                                              new SqlParameter("@PrmModel", model),
                                              new SqlParameter("@PrmFMCModelTypeCode", fmcModelTypeCode)
                                              };


                    // SQLを実行し、 DBからデータを取得
                    SqlCommand sqlCommand = sqlCon.GetSqlCommand(sqlParameter);
                    sqlCommand.CommandText = "spIFWSearchCatalogCarsByBrandModelFmc";

                    using (SqlDataReader sqlReader = sqlCon.ExecuteReader(sqlCommand))
                    {
                        if (sqlReader.Read())
                        {
                            do
                            {
                                CatalogCarGrade catalogCar = new CatalogCarGrade();
                                catalogCar.MakerCode = AutosServiceUtil.GetString(sqlReader["BrandCode"]);
                            }
                            }
                        }
//----------------------------------------------------------------
// <copyright file="SqlCommandType.cs" company="Microsoft">
//    Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//----------------------------------------------------------------

namespace QuickAnswer
{
    /// <summary>
    /// Sql コマンドタイプ
    /// </summary>
    public enum SqlCommandType
    {
        /// <summary>
        /// クエリ指定
        /// Text
        /// </summary>
        Text,

        /// <summary>
        /// ストアドプロシージャ指定
        /// StoredProcedure
        /// </summary>
        StoredProcedure,
    }
}
原文地址:https://www.cnblogs.com/2814/p/2773130.html