一、升级说明
1、重写了一套DataSet、DataTable,自定义Xml序列化和反序列化方法;
2、优化了程序,引用该组建无需引用其它关联程序集;
3、增加DataTable与实体类集合的互转、DataTable转换成动态类型集合、DataTable直接绑定到控件;
4、增加事务处理功能;
5、感谢网友“尘世流浪汉”提出宝贵意见,也欢迎大家试用并提出更多建议!
二、新功能示例
1、DataTable新功能
try
{
//创建一个数据连接
DbConnection conn =newDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|SoundEvents.mdb;");
//SQL Server无须做如下两步设置
//设置使用的数据访问程序集
conn.AssemblyName = "System.Data";
//设置数据工厂,这里是Oledb方式的数据工厂
conn.DbProviderFactory = "System.Data.OleDb.OleDbFactory";
//创建一个数据命令
DbCommandSyn cmd =newDbCommandSyn();
//设置命令的连接
cmd.Connection = conn;
//设置SQL语句,可以是存储过程
cmd.CommandText = "SELECT [JtServerCode],[JtEventID],[JtEventName] FROM [JtEvents] WHERE [JtServerCode]=@JtServerCode";
//设置命令类型,一般SQL语句是Text,存储过程是StoredProcedure
cmd.CommandType = DbCommandType.Text;
//设置执行类型
cmd.ExecuteType = DbExecuteType.Reader;
//添加一个参数,无参数可以不添加
cmd.Parameters.Add(newDbParameter("@JtServerCode","jt01"));
//执行命令,得到结果
DbCommandExecuteResult result = cmd.Execute();
if (!string.IsNullOrEmpty(result.ErrMsg))//首先判断ErrMsg是否有值,有表示执行过程发生错误
{
MessageBox.Show("发生错误:" + result.ErrMsg);
}
else
{
//将DataTable直接绑定到控件
DataTable dt = result.ReaderResult;
dataGrid1.ItemsSource = dt;
//将DataTable转换成实体类集合后绑定到控件
List<HisEvent> hisEvents = result.ReaderResult.ToEntityList<HisEvent>();
dataGrid1.ItemsSource = hisEvents;
//将DataTable转换成动态类型集合后绑定到控件
List<object> objList = result.ReaderResult.ToObjectList();
dataGrid1.ItemsSource = objList;
}
}
catch (Exception ex)
{
MessageBox.Show("发生错误:" + ex.ToString());
}
2、事物示例
try
{
//创建一个数据连接
DbConnection conn =newDbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false");
//设置使用的数据访问程序集
conn.AssemblyName = "System.Data.SQLite";
//设置数据工厂,这里是SQLite的数据工厂
conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory";
//创建一个数据命令
DbCommandSyn cmd =newDbCommandSyn();
//设置命令的连接
cmd.Connection = conn;
//设置执行类型
cmd.ExecuteType = DbExecuteType.Transaction;
//添加事务
TransactionItem trans1 =newTransactionItem();
trans1.CommandText = "INSERT INTO [T_Message] ([Mobile],[Content],[DateTime],[PlatFlag],[State]) VALUES (@Mobile,@Content,@DateTime,@PlatFlag,@State)";
trans1.CommandType = DbCommandType.Text;
trans1.Parameters.AddWithValue("@Mobile",newRandom().Next(10000000, 888888888).ToString());
trans1.Parameters.AddWithValue("@Content","这是一条测试短信!");
trans1.Parameters.AddWithValue("@DateTime",DateTime.Now);
trans1.Parameters.AddWithValue("@PlatFlag","SZHK");
trans1.Parameters.AddWithValue("@State",true);
cmd.Transaction.Add(trans1);
TransactionItem trans2 =newTransactionItem();
trans2.CommandText = "INSERT INTO [T_Logger] ([Content],[DateTime],[PlatFlag]) VALUES (@Content,@DateTime,@PlatFlag)";
trans2.CommandType = DbCommandType.Text;
trans2.Parameters.AddWithValue("@Content","短信发送成功!");
trans2.Parameters.AddWithValue("@DateTime",DateTime.Now);
trans2.Parameters.AddWithValue("@PlatFlag","SZHK");
cmd.Transaction.Add(trans2);
//执行命令,得到结果
DbCommandExecuteResult result = cmd.Execute();
if (!string.IsNullOrEmpty(result.ErrMsg))//首先判断ErrMsg是否有值,有表示执行过程发生错误
{
MessageBox.Show("发生错误:" + result.ErrMsg);
}
else
{
if (result.TransactionResult)
{
MessageBox.Show("事务执行成功!");
}
else
{
MessageBox.Show("事务执行失败!");
}
}
}
catch (Exception ex)
{
MessageBox.Show("发生错误:" + ex.ToString());
}
三、技术交流
有任何问题可以加入唯一指定的专用QQ群153079750进行反馈交流,也欢迎加入笔者的另一个Silverlight技术群175213051进行交流。