三層中最重要的SqlHelper類


1:連接數據庫(在表示層中添加應用配置文件,寫上以下代碼)

App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="constr" connectionString="server=.;uid=sa;pwd= ;database=DB" providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

2: 定義靜態只讀的連接字符,並在構造中給賦值

連接字符串STRCONN
private static readonly string  STRCONN= null;

        static SqlHelper()
        {
            STRCONN= System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        }

3: 返回受影響的行數(通常我們在創建存儲過程的時候,為了提升性能,都會使用set nocount on 的代碼關掉受影響的行數,但是我們可以通過返回@@error的數量是否為零,從而判斷,調用該方法執行是否成功!)

方法ExecuteNonQuery()
        public static int ExecuteNonQuery(string cmdText, CommandType commandType = CommandType.StoredProcedure, params SqlParameter[] values)
        {
            int result = -1;
            using (SqlConnection conn=new SqlConnection(STRCONN))
            {
                using (SqlCommand cmd=new SqlCommand(cmdText,conn))
                {
                    cmd.CommandType = commandType;
                    cmd.Parameters.AddRange(values);
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    if (cmd.Parameters.Contains("@ReturnValue"))
                    {
                        object error = cmd.Parameters["@ReturnValue"].Value;
                        if (error != null && error != DBNull.Value)
                        {
                            result = Convert.ToInt32(error);
                        }
                    }
                }
            }
            return result;
        }

4: 用於實體中的屬性和數據庫中的字段相關聯對應(賦值)

方法ExecuteDataReader()
private static T ExecuteDataReader<T>(SqlDataReader dr)
        {
            T obj = default(T);
            Type type = typeof(T);
            PropertyInfo[] propertyInfos = type.GetProperties();
            int columnCount = dr.FieldCount;
            obj = Activator.CreateInstance<T>();
            foreach (PropertyInfo propertyInfo in propertyInfos)
            {
                string propertyName = propertyInfo.Name;
                for (int i = 0; i < columnCount; i++)
                {
                    string columnName = dr.GetName(i);
                    if (string.Compare(propertyName, columnName, true) == 0)
                    {
                        object value = dr.GetValue(i);
                        if (value != null && value != DBNull.Value)
                        {
                            propertyInfo.SetValue(obj, value, null);
                        }
                        break;
                    }
                }
            }
            return obj;
        }

5: 返回一個對象

方法ExecuteEntity()
public static T ExecuteEntity<T>(string cmdText, CommandType commandType = CommandType.StoredProcedure, params SqlParameter[] values)
        {
            T obj = default(T);
            using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
            {
                using (SqlCommand cmd = new SqlCommand(cmdText, con))
                {
                    cmd.CommandType = commandType;
                    cmd.Parameters.AddRange(values);
                    con.Open();
                    using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dr.Read())
                        {
                            obj = ExecuteDataReader<T>(dr);
                            break;
                        }
                    }
                }
            }
            return obj;
        }

6: 返回List<T>集合

方法ExecuteList()
public static List<T> ExecuteList<T>(string cmdText,CommandType commandType= CommandType.StoredProcedure,params SqlParameter[] values)
        {
            List<T> list = new List<T>();
            using (SqlConnection conn=new SqlConnection(STRCONN))
            {
                using (SqlCommand cmd=new SqlCommand(cmdText,conn))
                {
                    cmd.CommandType = commandType;
                    cmd.Parameters.AddRange(values);
                    conn.Open();
                    using (SqlDataReader dr=cmd.ExecuteReader( CommandBehavior.CloseConnection))
                    {
                        while (dr.Read())
                        {
                            T obj = ExecuteDataReader<T>(dr);
                            list.Add(obj);
                        }
                    }
                }
            }
            return list;
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM