之前就也说过, 用自己封装的数据库操作的确好用。 但是, 那个文件也局限于本地使用、
今天, 这里贴出 第二版 数据库方便操作的类。不仅适用本地,远程也可以的(还是存在局限 慢慢完善吧)。
先把源码放出:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Web;
using System.Data.SqlClient;
using System.Data.Sql;
public class AccessHelper_Alter
{
protected static SqlConnection conn = new SqlConnection();
protected static SqlCommand comm = new SqlCommand();
public AccessHelper_Alter()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 打开数据库
/// </summary>
private static void openConnection(string connStr)
{
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = connStr;// "Data Source = (local);Initial Catalog = Demo;User Id = sa;Password = 1";
comm.Connection = conn;
try
{
conn.Open();
}
catch (Exception e)
{ throw new Exception(e.Message); }
}
}
/// <summary>
/// 关闭数据库
/// </summary>
private static void closeConnection()
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
comm.Dispose();
}
}
/// <summary>
/// 执行sql语句
/// </summary>
/// <param name="sqlstr"></param>
public static void excuteSql(string sqlstr, string connStr)
{
try
{
openConnection(connStr);
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
comm.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{ closeConnection(); }
}
/// <summary>
/// 返回指定sql语句的SqlDataReader对象,使用时请注意关闭这个对象。
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static SqlDataReader dataReader(string sqlstr, string connStr)
{
SqlDataReader dr = null;
try
{
openConnection(connStr);
comm.CommandText = sqlstr;
comm.CommandType = CommandType.Text;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
try
{
dr.Close();
closeConnection();
}
catch { }
}
return dr;
}
/// <summary>
/// 返回指定sql语句的SqlDataReader对象,使用时请注意关闭
/// </summary>
/// <param name="sqlstr"></param>
/// <param name="dr"></param>
public static void dataReader(string sqlstr, ref SqlDataReader dr, string connStr)
{
try
{
openConnection(connStr);
comm.CommandText = sqlstr;
comm.CommandType = CommandType.Text;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
try
{
if (dr != null && !dr.IsClosed)
dr.Close();
}
catch
{
}
finally
{
closeConnection();
}
}
}
/// <summary>
/// 返回指定sql语句的dataset
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataSet dataSet(string sqlstr, string connStr)
{
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection(connStr);
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return ds;
}
/// <summary>
/// 返回指定sql语句的dataset
/// </summary>
/// <param name="sqlstr"></param>
/// <param name="ds"></param>
public static void dataSet(string sqlstr, ref DataSet ds, string connStr)
{
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection(connStr);
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}
/// <summary>
/// 返回指定sql语句的datatable
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataTable dataTable(string sqlstr, string connStr)
{
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection(connStr);
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(dt);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return dt;
}
/// <summary>
/// 返回指定sql语句的datatable
/// </summary>
/// <param name="sqlstr"></param>
/// <param name="dt"></param>
public static void dataTable(string sqlstr, ref DataTable dt, string connStr)
{
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection(connStr);
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(dt);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}
/// <summary>
/// 返回指定sql语句的dataview
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataView dataView(string sqlstr, string connStr)
{
SqlDataAdapter da = new SqlDataAdapter();
DataView dv = new DataView();
DataSet ds = new DataSet();
try
{
openConnection(connStr);
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
dv = ds.Tables[0].DefaultView;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return dv;
}
}
这里,默认使用的是SQL 数据库, 若需要, 只需将其中的Sql字段换成Oledb即可使用Access数据库。
开始介绍该类前, 先看一张图:
图展示的很明显:需要传入的连接数据库的字段。对,没错,上面封装的 AccessHelper_Alter中,当需要使用该类的函数的时候, 除了需要传入 操作的字符串,还需要传入 连接数据库的字符串。
下面简单介绍下里面常用的2个函数(以SQL数据库为例):
我这里先定义了数据库的点解字符串:
ConnectionString = "Data Source = (local);Initial Catalog = Demo;User Id = sa;Password = 1";
若需
动态更换这个数据库连接字符串
。可以在用一个
string
类型的变量保存
数据库的所在
IP
,需打开的
数据库名
,
登录数据库的用户名 和密码
,再将这个连接字符串传入
AccessHelper_Alter
类的函数中即可。详情如下:
1,excuteSql
功能:执行sql语句
函数原型:
/// <summary>
/// 执行sql语句
/// </summary>
/// <param name="sqlstr"></param>
public static void excuteSql(string sqlstr, string connStr)
{
try
{
openConnection(connStr);
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
comm.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{ closeConnection(); }
}
举例:
///-删除SQL 语句
string delStr = "DELETE FROM [" + combox_tabelName.Text + "] WHERE " + KeyNameStr + " = '" + getKeyStr + "'";
AccessHelper_Alter.excuteSql(delStr, connectionString);
这里的
connectString
是连接数据库的字符串。操作数据库的操作:
更新,删除
,就很适合这个函数呢。
2,dataSet
功能:返回指定sql语句的dataset
<span style="color:#3333ff;"> </span> /// <summary>
/// 返回指定sql语句的dataset
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataSet dataSet(string sqlstr, string connStr)
{
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection(connStr);
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return ds;
}
用法举例:
///------刷新datagridview中的数据
showData_DataGridView.DataSource = AccessHelper_Alter.dataSet("SELECT * FROM ["+combox_tabelName.Text+"]", connectionString).Tables[0];
AccessHelper_Alter.dataset()
这个函数执行完后,会得到一个
DataSet
类型的数据集。
比如,查询某张表中的数据,将其显示在 datagridview控件上( 这里,建议采用这种数据集绑定控件,以保证数据库数据安全)。
DataSet ds = AccessHelper_Alter.dataSet(queryStr);
剩下的函数,有需要的, 可以去源码里面看看,或许有你想要的函数。篇幅有限,我就不赘述了。源码也有了,动手消化下吧