数据库操作类的封装是任何工程都必不可少地,本例当然也不例外。Sql类主要包括两类方法:一类用来直接执行SQL语句,另一类用来执行存储过程。

    其中的数据库连接字符串的数据库路径采用了绝对路径,读者调试程序时应当做相应的更改。Sql类的具体代码如下:



    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data;
    namespace MyChat

    {

    //数据库操作类

    public class Sql
    {
    private string str = null;                   //数据库连接字符串
    public SqlConnection Con;                    //sql数据连接组件实例化
    public SqlCommand command = new SqlCommand();    //初始化一个SQL命令对象
    public Sql()                                 //类初始化,初始化数据连接
    {
    string path = @"C:\Documents and Settings\Administrator\桌面\tools\
    mychat1.0\Chat";
    //数据库连接字符串
    str="Data Source=.\\SQLEXPRESS;AttachDbFilename=\"" + path + "\\app_data\\chat.mdf\";
    Integrated Security=True;User Instance=True";
    Con = new SqlConnection(str);
    }

    #region SQL语句操作

    // 执行只读数据信息的提取,返回一个datareader

    public SqlDataReader GetReader(string search)
    {
    SqlDataReader Reader;
    if(Con.State != ConnectionState.Open)
    Con.Open();                           //打开数据库连接
    SqlCommand Com = new SqlCommand(search, Con);
    Reader = Com.ExecuteReader();        //执行SQL语句
    return Reader;                           //返回一个reader
    }

    // 输入查询字符串,返回dataset

    public DataSet getMyDataSet(string sql)
    {
    command.Connection = Con;            //配置command对象
    command.CommandText = sql;           //赋予要执行的语句
    DataSet dt = new DataSet();          //初始化一个数据返回集合
    SqlDataAdapter da = new SqlDataAdapter(command);
    Con.Open();                          //打开连接
    da.Fill(dt);                     //执行语句
    command.Connection.Close();          //关闭连接
    return dt;
    }

    // 执行非查询SQL语句

    public void ExecuteSql(string sql)
    {
    if(Con.State != ConnectionState.Open)
    Con.Open();                      //如果数据连接关闭,则打开
    SqlCommand Com = new SqlCommand(sql, Con);
    Com.ExecuteNonQuery();               //执行非查询SQL语句
    Con.Close();
    }

    // 执行非查询数据库操作,是否关闭数据库连接  可以选择

    public void ExecuteSql(string sql, bool closeConnection)
    {
    if(Con.State != ConnectionState.Open)
    Con.Open();                      //如果未打开连接,则打开
    SqlCommand Com = new SqlCommand(sql, Con);
    Com.ExecuteNonQuery();
    if (closeConnection) Con.Close();    //如果需要关闭,则关闭连接
    }

    #endregion
    #region 执行存储过程的代码

    //输入存储过程名称,执行查询存储过程
    public DataSet getDataSet(string produreName)
    {
    command.Connection = Con;            //赋予连接对象
    //执行的类型为存储过程
    command.CommandType = CommandType.StoredProcedure  ;
    command.CommandText = produreName;   //赋予执行的存储过程名字
    DataSet dt = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(command);
    Con.Open();                          //打开连接
    da.Fill(dt);                     //填充数据
    command.Connection.Close();
    return dt;                           //返回数据集
    }

    //输入存储过程名,执行非查询存储过程

    public bool exec(string produreName)
    {
    bool flag = false;                   //任务是否正确执行,初始化为false
    command.Connection = Con;            //赋予command对象以数据连接
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = produreName;   //存储过程名称
    try
    {
    command.ExecuteNonQuery();        //执行存储过程
    flag = true;                      //正确完成任务
    }

    finally
    {
    command.Connection.Close();           //关闭连接
    }
    return flag;                         //返回成功与否的标志
    }
    #endregion
    }
    }