silverlight通过WCF访问SQLserver示例

VS2013+sql2012+win8.1测试通过 作者:一剑

1.创建sliverlight项目testWCFsql;
2.右击web项目添加新建项->类,命名为ClassDBserver,修改代码:

using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;

namespace testWCFsql.Web
{
    public class ClassDBserver
    {
        static public DataSet DBselect(string sql)
        {
            string conn;
            conn = "Data Source=none;Initial Catalog=comDB;User ID=sa;Password=123456";
            //conn = WebConfigurationManager.AppSettings.Get("DBappSettings");
            //conn = WebConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
            try
            {
                using (SqlConnection cnn = new SqlConnection(conn))
                {
                    cnn.Open();
                    using (SqlTransaction trans = cnn.BeginTransaction(IsolationLevel.Serializable))
                    {
                        try
                        {
                            using (SqlCommand cmd = new SqlCommand(sql, cnn))
                            {
                                cmd.Transaction = trans;
                                using (DataSet ds = new DataSet())
                                {
                                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                                    {
                                        da.Fill(ds);
                                        trans.Commit();
                                    }
                                    return ds;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            trans.Rollback();
                            return new DataSet();
                            throw ex;
                        }
                        finally
                        {
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return new DataSet();
                throw ex;
            }
        }
    }
}

3.右击testWCFsql.web项目添加新建项“启用了Silverlight的WCF服务”,命名为ServiceWCF;
4.修改

[OperationContract]
public void DoWork()
{
  return;
 }

using System.Data;
using System.Collections.Generic;

[OperationContract]
public List<ClassEmployee> getData()
{
    DataSet ds = ClassDBserver.DBselect("select * from employee");
    List<ClassEmployee> userList = new List<ClassEmployee>();//添加using System.Collections.Generic;
    foreach (DataRow dr in ds.Tables[0].Rows)
    {
        ClassEmployee user = new ClassEmployee();//userList是引用类型,所以这句不能放foreach外面
        user.ID = (int)dr["ID"];
        user.name = (string)dr["name"];
        user.departmentID = (int)dr["departmentID"];
        userList.Add(user);
    }
    return userList;
}
[DataContract]
public class ClassEmployee
{
    [DataMember]
    public int ID;
    [DataMember]
    public string name;
    [DataMember]
    public int departmentID;
}

5.生成一下;
6.右击客户端testWCFsql项目,添加服务引用->发现,默认ServiceReference1,确定;
7.双击页面文件MainPage.xaml.cs,从工具箱中拖入DataGrid控件,命名为datagrid1;
8.修改后台代码为:

using System.Xml;
using System.IO;

namespace testWCFsql
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            ServiceReference1.ServiceWCFClient myClient = new ServiceReference1.ServiceWCFClient();
            myClient.getDataCompleted += new EventHandler<ServiceReference1.getDataCompletedEventArgs >(myGetDataCompleted);
            myClient.getDataAsync();
        }

        void myGetDataCompleted(object sender, ServiceReference1.getDataCompletedEventArgs e)
        {
            System.Collections.ObjectModel.ObservableCollection<ServiceReference1.ServiceWCFClassEmployee> users = e.Result;
            datagrid1.ItemsSource = users;
        }
    }
}

9.此步可选:双击Weg.config修改,在

<configuration>
    <system.web>

之间插入

    <appSettings>
      <add key="DBappSetting" value="Data Source=none;Initial Catalog=comDB;User ID=sa;Password=123456"/>
    </appSettings>
    <connectionStrings>
      <add name="myConnectionString" connectionString="Data Source=none;Initial Catalog=comDB;User ID=sa;Password=123456" providerName="System.Data.SqlClient"/>
    </connectionStrings>

同时修改前面ClassDBserver.cs中的连接字符串为从配置文件中读取。
10.Now,just run it!!

posted @ 2014-03-25 00:10  一 剑  阅读(881)  评论(0编辑  收藏  举报