该组件提供类似ADO.NET编程接口,可以直接在Silverlight端访问Web端数据库。可以实现在Web端无需事先手工编写或自动创建任何程序代码和数据实体类的情况下, 便可在Silverlight端对Web端数据库进行增加、删除、修改、查询等数据操作。此外, 还支持访问数据库的存储过程(StoredProcdures)、视图(Views)、自定义函数(User Defined Functions)等。
该组件包含3个文件:
System.Data.Silverlight.dll、
System.Data.Silverlight.Web.dll
DataHandler.ashx
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。
Web服务器端文件,需要把该程序集拷贝到网站Bin目录,无需引用。
Web服务器端的文件,需要把该文件拷贝到网站根目录。
//创建一个数据连接
DbConnection conn =newDbConnection("Server=192.168.0.7;DataBase=JitonClient;Uid=sa;Pwd=jiton;");
//创建一个数据命令
DbCommandSyn cmd =newDbCommandSyn();
//设置命令的连接
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(newDbParameter(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;
}
//创建一个数据连接
DbConnection conn =newDbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false");
//设置使用的数据访问程序集
conn.AssemblyName = "System.Data.SQLite";
//设置数据工厂,这里是SQLite的数据工厂
conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory";
//创建一个数据命令
DbCommandAsyn cmd =newDbCommandAsyn();
//设置命令的连接
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(newDbParameter(DbType.Int32,"@Id", 3));
//设置命令执行完毕的委托事件
cmd.ExecuteEnd += newEventHandler<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;
}
}
该组件默认支持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 =newDbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false");
//设置使用的数据访问程序集
conn.AssemblyName = "System.Data.SQLite";
//设置数据工厂,这里是SQLite的数据工厂
conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory";
其它操作步骤和操作SQL Server无差异,完整的示例代码见4.中的示例。
有任何问题可以加入唯一指定的专用QQ群153079750进行反馈交流,也欢迎加入笔者的另一个Silverlight技术群175213051进行交流。
源代码下载