以前经常用sql语句(update)更新数据库,有使用用起来不是很方便,特别是数据量比较大的情况下(比如数据表)很麻烦~~后来感觉用DataSet更新数据库是不错的选择.于是急着写了一个 用 ataSet更新数据库的类
如下:(后面有使用说明,总结)
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace winApplication
{
public class sqlAccess
{
//与SQL Server的连接字符串设置
private string _connString;
private string _strSql;
private SqlCommandBuilder sqlCmdBuilder;
private DataSet ds = new DataSet();
private SqlDataAdapter da;
public sqlAccess( string connString, string strSql)
{
this ._connString=connString;
}
private SqlConnection GetConn()
{
try
{
SqlConnection Connection = new SqlConnection( this ._connString);
Connection.Open();
return Connection;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"数据库连接失败");
throw ;
}
}
//根据输入的SQL语句检索数据库数据
public DataSet SelectDb( string strSql, string strTableName)
{
try
{
this ._strSql = strSql;
this .da = new SqlDataAdapter( this ._strSql, this .GetConn());
this .ds.Clear();
this .da.Fill(ds,strTableName);
return ds; //返回填充了数据的DataSet,其中数据表以strTableName给出的字符串命名
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"数据库操作失败");
throw ;
}
}
//数据库数据更新(传DataSet和DataTable的对象)
public DataSet UpdateDs(DataSet changedDs, string tableName)
{
try
{
this .da = new SqlDataAdapter( this ._strSql, this .GetConn());
this .sqlCmdBuilder = new SqlCommandBuilder(da);
this .da.Update(changedDs,tableName);
changedDs.AcceptChanges();
return changedDs; //返回更新了的数据库表
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"数据库更新失败");
throw ;
}
}
使用说明 总结 :
1. GetConn方法创建一个数据库连接,返回SqlConnection。
2. 使用的 select 命令中必须包含主键,这点大家都知道的 !
3. this .da.Fill(ds,strTableName) 填充数据集
4. 构造 CommandBuilder 对象时 , 将 DataAdapter 对象作为构造函数参数传入 :
this .sqlCmdBuilder = new SqlCommandBuilder(da);
5. 在调用UpdateDs()更新数据库前,请检查changedDs是否已经被更新过,用changedDs.[tableName] GetChanges() != null;
6. 用 this .da.Update(changedDs,tableName) 方法更新数据 , 然后调用 changedDs.AcceptChanges() 才能真正的更新数据库, 调用 changedDs. RejectChanges() 取消更新。