System.Data.Silverlight V2.1
一、升级说明
1、修复了数据库中字段值为空值的时候查询报错的Bug;
2、修复DbCommand属性ExecuteType为DbExecuteType.Scalar时执行命令报错的Bug;
3、感谢网友“尘世流浪汉”和“春之子”反馈Bug,也欢迎大家试用并提出更多建议!
二、修复功能示例
1、空值测试
public class T_Test
{
public int? Id { get; set; }
public string Name { get; set; }
}
try
{
//创建一个数据连接
DbConnection conn = new DbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false");
//设置使用的数据访问程序集
conn.AssemblyName = "System.Data.SQLite";
//设置数据工厂,这里是SQLite的数据工厂
conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory";
//创建一个数据命令
DbCommandSyn cmd = new DbCommandSyn();
//设置命令的连接
cmd.Connection = conn;
//设置SQL语句,可以是存储过程
cmd.CommandText = "SELECT [Id],[Name] FROM [T_Test]";
//设置命令类型,一般SQL语句是Text,存储过程是StoredProcedure
cmd.CommandType = DbCommandType.Text;
//设置执行类型
cmd.ExecuteType = DbExecuteType.Reader;
//执行命令,得到结果
DbCommandExecuteResult result = cmd.Execute();
if (!string.IsNullOrEmpty(result.ErrMsg))//首先判断ErrMsg是否有值,有表示执行过程发生错误
{
MessageBox.Show("发生错误:" + result.ErrMsg);
}
else
{
List<T_Test> valueList = result.ReaderResult.ToEntityList<T_Test>();
//将数据显示在DataGrid中
this.dataGrid1.ItemsSource = valueList;
}
}
catch (Exception ex)
{
MessageBox.Show("发生错误:" + ex.ToString());
}
2、存储过程示例
try
{
//数据库创建T_SQL脚本在网站App_Data文件夹下面,文件名为OMSDB.sql
DbConnection conn = new DbConnection("Server=localhost;DataBase=OMSDB;Uid=sa;Pwd=jiton;");
DbCommandSyn cmd = new DbCommandSyn();
cmd.Connection = conn;
//设置存储过程名称
cmd.CommandText = "JP_GetSystemName";
//设置命令类型为存储过程
cmd.CommandType = DbCommandType.StoredProcedure;
cmd.ExecuteType = DbExecuteType.Scalar;
//执行命令,得到结果
DbCommandExecuteResult result = cmd.Execute();
if (!string.IsNullOrEmpty(result.ErrMsg))//首先判断是否存在错误
{
MessageBox.Show("发生错误:" + result.ErrMsg);
}
else
{
MessageBox.Show("系统名称为:" + result.ScalarResult as string);
}
}
catch (Exception ex)
{
MessageBox.Show("发生错误:" + ex.Message);
}
三、技术交流
有任何问题可以加入唯一指定的专用QQ群153079750进行反馈交流,也欢迎加入笔者的另一个Silverlight技术群175213051进行交流。
System.Data.Silverlight V2.0
System.Data.Silverlight V2.0版本升级说明
一、升级说明
1、重写了一套DataSet、DataTable,自定义Xml序列化和反序列化方法;
2、优化了程序,引用该组建无需引用其它关联程序集;
3、增加DataTable与实体类集合的互转、DataTable转换成动态类型集合、DataTable直接绑定到控件;
4、增加事务处理功能;
5、感谢网友“尘世流浪汉”提出宝贵意见,也欢迎大家试用并提出更多建议!
二、新功能示例
1、DataTable新功能
try
{
//创建一个数据连接
DbConnection conn = new DbConnection("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 = new DbCommandSyn();
//设置命令的连接
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(new DbParameter("@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 = new DbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false");
//设置使用的数据访问程序集
conn.AssemblyName = "System.Data.SQLite";
//设置数据工厂,这里是SQLite的数据工厂
conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory";
//创建一个数据命令
DbCommandSyn cmd = new DbCommandSyn();
//设置命令的连接
cmd.Connection = conn;
//设置执行类型
cmd.ExecuteType = DbExecuteType.Transaction;
//添加事务
TransactionItem trans1 = new TransactionItem();
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", new Random().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 = new TransactionItem();
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进行交流。
开源Silverlight数据访问组件System.Data.Silverlight
1.概述
该组件提供类似ADO.NET编程接口,可以直接在Silverlight端访问Web端数据库。可以实现在Web端无需事先手工编写或自动创建任何程序代码和数据实体类的情况下, 便可在Silverlight端对Web端数据库进行增加、删除、修改、查询等数据操作。此外, 还支持访问数据库的存储过程(StoredProcdures)、视图(Views)、自定义函数(User Defined Functions)等。
2、使用前的准备
2.1组件Lib文件
该组件包含3个文件:
System.Data.Silverlight.dll、
System.Data.Silverlight.Web.dll
DataHandler.ashx
2.1.1System.Data.Silverlight.dll
Silverlight端需引用的程序集,引用该程序集还需要引用关联的程序集,包含:
System.ComponentModel.DataAnnotations.dll
System.Windows.Controls.Data.dll
System.Windows.Controls.Data.Input.dll
System.Windows.Data.dll
System.Xml.Linq.dll
该程序集中定义了一套DataSet、DataTa对象,作为数据通讯的数据格式,完全兼容ADO.NET中的DataSet、DataTable,两者之间可以通过XML互相转换,提供相应的转换方法。程序中还定义了一套DbConnection、DbCommand对象,用于向Web端发起数据库操作命令,使用方式类似ADO.NET。
2.1.2 System.Data.Silverlight.Web.dll
Web服务器端文件,需要把该程序集拷贝到网站Bin目录,无需引用。
2.1.3 DataHandler.ashx
Web服务器端的文件,需要把该文件拷贝到网站根目录。
2.2同步方式操作数据库示例
//创建一个数据连接
DbConnection conn = new DbConnection("Server=192.168.0.7;DataBase=JitonClient;Uid=sa;Pwd=jiton;");
//创建一个数据命令
DbCommandSyn cmd = new DbCommandSyn();
//设置命令的连接
cmd.Connection = conn;
//设置SQL语句,可以是存储过程
cmd.CommandText = "SELECT [UserId],[UserName],[GroupId] FROM [Usertb] WHERE [GroupId]=@GroupId";
//设置命令类型,一般SQL语句是Text,存储过程是StoredProcedure
cmd.CommandType = DbCommandType.Text;
//设置执行类型
cmd.ExecuteType = DbExecuteType.Reader;
//添加一个参数,无参数可以不添加
cmd.Parameters.Add(new DbParameter(DbType.Int32, "@GroupId", 5));
//执行命令,得到结果
DbCommandExecuteResult result = cmd.Execute();
if (!string.IsNullOrEmpty(result.ErrMsg))//首先判断ErrMsg是否有值,有表示执行过程发生错误
{
MessageBox.Show("发生错误:" + result.ErrMsg);
}
else
{
DataTable dt = result.ReaderResult;
//将数据显示在DataGrid中
this.dataGrid1.ItemsSource = dt.Rows;
}
2.3异步方式操作数据库示例
//创建一个数据连接
DbConnection conn = new DbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false");
//设置使用的数据访问程序集
conn.AssemblyName = "System.Data.SQLite";
//设置数据工厂,这里是SQLite的数据工厂
conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory";
//创建一个数据命令
DbCommandAsyn cmd = new DbCommandAsyn();
//设置命令的连接
cmd.Connection = conn;
//设置SQL语句,可以是存储过程
cmd.CommandText = "SELECT [Id],[Content],[PlatFlag],[DateTime] FROM [T_Logger] WHERE [Id]>=@Id";
//设置命令类型,一般SQL语句是Text,存储过程是StoredProcedure
cmd.CommandType = DbCommandType.Text;
//设置执行类型
cmd.ExecuteType = DbExecuteType.Reader;
//添加一个参数,无参数可以不添加
cmd.Parameters.Add(new DbParameter(DbType.Int32, "@Id", 3));
//设置命令执行完毕的委托事件
cmd.ExecuteEnd += new EventHandler<DbCommandExecuteResult>(cmd_ExecuteEnd);
//异步执行命令
cmd.Execute();
void cmd_ExecuteEnd(object sender, DbCommandExecuteResult e)
{
if (!string.IsNullOrEmpty(e.ErrMsg))//首先判断ErrMsg是否有值,有表示执行过程发生错误
{
MessageBox.Show("发生错误:" + e.ErrMsg);
}
else
{
DataTable dt = e.ReaderResult;
//将数据显示在DataGrid中
this.dataGrid1.ItemsSource = dt.Rows;
}
}
2.4对其它数据库的支持
该组件默认支持SQL Sserver,理论上也可支持其它数据库,只要数据库提供对应的ADO.NET实现接口,已经测试过Access、SQLite。操作其它数据库时必须把对应的ADO.NET实现接口的程序集拷贝到网站Bin目录下面,操作SQL Server无需该步骤。比如操作SQLite数据库,需要把SQLite的ADO.NET实现接口程序集System.Data.SQLite.dll文件拷贝到网站Bin下面。此外还需指定DbConnection对象的AssemblyName、DbProviderFactory属性的值。
//创建一个数据连接
DbConnection conn = new DbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false");
//设置使用的数据访问程序集
conn.AssemblyName = "System.Data.SQLite";
//设置数据工厂,这里是SQLite的数据工厂
conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory";
其它操作步骤和操作SQL Server无差异,完整的示例代码见2.3中的示例。
2.5技术交流
有任何问题可以加入唯一指定的专用QQ群153079750进行反馈交流,也欢迎加入笔者的另一个Silverlight技术群175213051进行交流。
Silverlight数据访问组件源代码
1、提供了在Silverlight端直接访问Web端数据库的标准编程接口(接口类似ADO.net)。在Web端无需事先手工编写或自动创建任何程序代码和数据实体类, 便可在Silverlight端对Web端数据库进行增加、删除、修改、查询等数据操作。此外, 还支持访问数据库的存储过程(StoredProcdures)、视图(Views)、自定义函数(User Defined Functions)等。
2、用于简化Silverlight端与Web端进行通讯所需代码。
通过类库的 DBCommand(Ex), MSCommand(Ex), MSCommand(Ex) 可以大大简化Silverlight端与Web端进行通讯所需代码。 从而, 大大提高Silverlight应用系统的编程效率。其中后缀为Ex的表示同步类, 无后缀Ex的表示异步类。
3、用于运行时动态构建二维表结构数据集合。
DataTable支持大部分.net基础数据类型(如: 文本, 数字, 日期, 布尔, 字节数组等), 支持数据绑定。因此, 可用于运行时动态构建二维表结构的数据集合。数据集合无需转换可以直接作为DataGrid的ItemsSource。
4、作为Silverlight和Web进行数据交换的媒介。
DataTable实现了自动系列化和自动反系列化。因此, 可以作为Silverlight端和Web端进行数据交换的媒介。注: 国内将Serilization译为“系列化”, 并不准确, 译为“持久化”更为贴切。
MySQL数据库中文参考手册
MySQL数据库中文参考手册
visual studio调试技巧
visual studio调试技巧
DanielVaughan.dll
DanielVaughan.dll 文件,在网上找了很久才找到的
Microsoft.Silverlight.4.Business.Application.Development.Apr.2010
Microsoft.Silverlight.4.Business.Application.Development.Apr.2010英文版pdf电子书
Hello Silverlight
Hello Silverlight英文版pdf电子书
Silverlight面试题(选择题)
一些常见的Silverlight面试题(选择题)
C#字符串和正则表达式参考手册
C#字符串和正则表达式参考手册,C#程序员必看书籍
常用C#加密大全下载
C#加密大全,包含C#常用的一些加密方法