利用.NET2.0自带的数据库访问工厂写的数据库访问基类

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.Common;

using System.Configuration;

using System.Data;


namespace DAL

{

    
public class Database

    {

        
#region 字段

        
private const string defaultConnectionConfigKey ="default";

        
/// <summary>

        
/// 数据连接字符串

        
/// </summary>

        
private string connectionString;

        
/// <summary>

        
/// 数据库 驱动 提供者

        
/// </summary>

        
private string providerName;

        
/// <summary>

        
/// 数据库 驱动 提供者 工厂

        
/// </summary>

        
private DbProviderFactory factory;

        
#endregion

        
#region 构造函数

        
/// <summary>

        
/// 默认构造函数 注意 config文件的,数据库连接节点名称默认为"default",

        
/// 才调用此初始构造函数。否则调用重载构造函数。

        
/// </summary>

        
public Database():this(defaultConnectionConfigKey)

        {

        }

        
/// <summary>

        
/// 以config中的数据库节点名为参数构造数据库访问对象

        
/// </summary>

        
/// <param name="conConfigKey">config中的数据库节点名</param>

        
public Database(string conConfigKey)

        {

            ConnectionStringSettings settings 
= ConfigurationManager.ConnectionStrings[conConfigKey];//连接App.config的数据库的 连接

            connectionString 
= settings.ConnectionString;//获得链接字符串

            providerName 
= settings.ProviderName;//得到链接名

            factory 
= DbProviderFactories.GetFactory(providerName);//连接到sql数据库

        }

        
#endregion

        
#region 方法

        
#region 执行查询语句,返回一组数据——返回类型是DataTable

        
/// <summary>

        
/// 执行查询语句,返回一组数据。返回类型是DataTable。

        
/// 一般为Select的sql语句

        
/// </summary>

        
/// <param name="sql">执行的Sql语句</param>

        
/// <returns>返回数据的DataTable</returns>

        
public DataTable Select(string sql)

        {

            
using (DbConnection conn = factory.CreateConnection())//连接数据库

            {

                
try

                {

                    conn.ConnectionString 
= connectionString;//得到链接的字符串

                    conn.Open();
//打开连接

                    DbDataAdapter adapter 
= factory.CreateDataAdapter();//

                    adapter.SelectCommand 
= conn.CreateCommand();//创建连接命令

                    adapter.SelectCommand.CommandText 
= sql;//执行查询的sql命令

                    DataTable table 
= new DataTable();//定义表

                    adapter.Fill(table);
//填充表

                    
return table;//返回表

                }

                
catch

                {

                    conn.Close();
//关闭连接

                    
return null;//返回空值

                }

            }

        }

        
#endregion

        
#region 执行 语句 返回影响的行数

        
/// <summary>

        
/// 执行sql语句,一般为更新(update),插入(insert)、删除(delete)的操作。

        
/// 返回的是数据库执行sql语句,影响的数据表行数。

        
/// </summary>

        
/// <param name="sql">执行的Sql语句</param>

        
/// <returns>返回的是数据库执行sql语句,影响的数据表行数。</returns>

        
public int Exec(string sql)

        {

            
using (DbConnection conn = factory.CreateConnection())

            {

                
try

                {

                    DbCommand cmd 
= conn.CreateCommand();

                    cmd.CommandText 
= sql;

                    conn.ConnectionString 
= connectionString;

                    conn.Open();

                    
int i = cmd.ExecuteNonQuery();

                    
return i;

                }

                
catch

                {

                    conn.Close();

                    
return 0;

                }

            }

        }

        
#endregion

        
#region 执行语句返回 首行首列,返回类型是Object类型。

        
/// <summary>

        
/// 执行sql语句,返回首行首列。返回类型是Object类型。

        
/// </summary>

        
/// <param name="sql">执行的Sql语句</param>

        
/// <returns>返回Object类型的首行首列数据。</returns>

        
public Object ExecScalar(string sql)

        {

            
using (DbConnection conn = factory.CreateConnection())

            {

                
try

                {

                    DbCommand cmd 
= conn.CreateCommand();

                    cmd.CommandText 
= sql;

                    conn.ConnectionString 
= connectionString;

                    conn.Open();

                    Object i 
= cmd.ExecuteScalar();

                    
return i;

                }

                
catch

                {

                    conn.Close();

                    
return null;

                }

            }

        }

        
#endregion



        
#endregion

    }

}
posted @ 2008-03-27 19:37  yangjun  阅读(481)  评论(0编辑  收藏  举报