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

        /// 一般为Selectsql语句

        /// </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

    }

}
配置文件中的配置

 <connectionStrings>
  <!-- Access 数据库 连接字符串
            密码:
            Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Financing_db.mdb;Persist Security Info=False;Jet OLEDB:Database Password=xxxxxx

            通常:
            Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Financing_db.mdb

            其中:
            |DataDirectory|系统被解析到系统所在文件夹下。
     -->
  <add name="default" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\App_Data\EFang.mdb;Persist Security Info=True" providerName="System.Data.OleDb"/>
  <!-- Sql Server 数据库 连接字符串
  <add name="default" connectionString="server=192.168.1.88;uid=sa;pwd=sa;database=efang" providerName="System.Data.SqlClient"/> -->

Integrated Security=True  windows用户登录数据库
  <!-- Oracle 数据库 连接字符串 
  <add name="default" connectionString="Data Source=svrora;User ID=efang;Password=efang;" providerName="System.Data.OracleClient"/>-->
 </connectionStrings>

posted on 2008-03-27 18:14  阿春  阅读(506)  评论(0编辑  收藏  举报