现在的位置: 首页 > 综合 > 正文

ADO.NET 数据库访问对象封装

2012年07月02日 ⁄ 综合 ⁄ 共 2185字 ⁄ 字号 评论关闭
ADO.net架构的优良使得,C#操作多数库访问异常方便,我们可以将驱动写在连接字符串里,
利用 DbProviderFactory 获取驱动的工厂,示例代码如下
/// <summary>
/// 数据库操作帮助类,可处理CRUD 操作,和存储过程调用
/// </summary>
public class Dbutil
{
    private DbProviderFactory _factory;
    private string _connectionString;
    private string _connectioinName;

    public string ConnectionName
    {
        get { return _connectioinName; }
        set
        {
            _connectioinName = value;
            _connectionString = ConfigurationManager.ConnectionStrings[value].ConnectionString;
            _factory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings[value].ProviderName);
        }
    }

    public Dbutil(string connName)
    {
        ConnectionName = connName;
    }

    public DataSet ExecuteDataSet(string sql, List<DbParameter> list)
    {
        using (DbConnection conn = _factory.CreateConnection())
        using (DbCommand cmd = _factory.CreateCommand())
        using (DbDataAdapter da = _factory.CreateDataAdapter())
        {
            conn.ConnectionString = _connectionString;
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sql;
            da.SelectCommand = cmd;

            foreach (DbParameter i in list)
            {
                cmd.Parameters.Add(i);
            }
           
            using (DataSet ds = new DataSet())
            {
                conn.Open();
                da.Fill(ds);
                return ds;
            }
        }
    }

    public int ExecuteNonQuery(string sql)
    {
        using (DbConnection conn = _factory.CreateConnection())
        using (DbCommand cmd = _factory.CreateCommand())
        {
            conn.ConnectionString = _connectionString;
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sql;
            conn.Open();
           
            return cmd.ExecuteNonQuery();
        }

    }


    public int ExecuteNonQuery(string sql, List<DbParameter> list)
    {
        using (DbConnection conn = _factory.CreateConnection())
        using (DbCommand cmd = _factory.CreateCommand())
        {
            conn.ConnectionString = _connectionString;
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sql;

            foreach (DbParameter i in list)
            {
                cmd.Parameters.Add(i);
            }
            conn.Open();
            return cmd.ExecuteNonQuery();
        }

    }

    public IEnumerable<object> ExecuteProcedure(string procedureName, List<DbParameter> list)
    {
        using (DbConnection conn = _factory.CreateConnection())
        using (DbCommand cmd = _factory.CreateCommand())
        {
            conn.ConnectionString = _connectionString;
            cmd.Connection = conn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = procedureName;

            foreach (DbParameter i in list)
            {
                cmd.Parameters.Add(i);
            }
            conn.Open();
            var res = cmd.ExecuteNonQuery();
            yield return res;
            foreach (DbParameter i in list)
            {
                if (i.Direction == ParameterDirection.Output)
                    yield return i.Value;
            }

        }
    }
}

 

 

抱歉!评论已关闭.