• 三层中最重要的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;
            }
    因为相信,所以我去做了......
  • 相关阅读:
    Windows Phone 开发 MD5计算
    php 3des加密算法以及与java,.net,c#的交互的一致性
    <加密算法c#>——— 3DES加密之ECB模式 和 CBC模式
    Blend PathListBox 使用
    计算机的几种类型单词、快捷键
    【SQL Server】 数据定义语言(定义基本表、完整性约束实现、索引)
    【SQL Server】 数据查询语句
    【WindowsPhone】 独立存储
    终结,铭记
    Day 3,4,5
  • 原文地址:https://www.cnblogs.com/jeffqing/p/2748690.html
Copyright © 2020-2023  润新知