代码改变世界

(原创)WCF读取数据库中表

2013-04-10 19:51  Keiven_LY  阅读(2023)  评论(2编辑  收藏  举报

7.1 项目说明

服务器端为Windows窗体应用程序,客户端也为Windows窗体应用程序,编写语言为:C#

7.2 项目架构

7.3 项目开发过程

7.3.1 服务器端设计

第一步:新建一个空的解决方案,命名为WCFDemo_1(可以任意取名)

第二步:点击“文件”——>“添加”——>“新建项目”,左侧栏选择“其他语言”——>“Visual C#”——>“Windows”,右边模板中选择“Windows窗体应用程序”,命名为:

SQLService_Host,如图所示,点击确定按钮即可,这样完成了数据库连接服务的宿主程序的创建。

第三步:右键项目“SQLService_Host”——>“添加”——>“新建项”,在模板中选择“WCF服务”,命名为:WCFService.cs,如图所示:

点击“添加”按钮,即创建了一个名为WCFService.cs的服务,同时生成了其相应的接口程序:I WCFService.cs及配置文件:App.config

第四步:编写接口程序I WCFService.cs

[OperationContract]
        System.Data.DataTable GetDataByTable();

注:这里接口实现的功能:通过DataTable获得数据库

第五步:编写接口实现的服务程序WCFService.cs

public System.Data.DataTable GetDataByTable()
        {
            //这里可以定义数据持久化操作,访问数据库等
            System.Data.DataSet dataSet= new System.Data.DataSet();
            System.Data.DataTable dataTable  = null;

            SqlConnection sqlConnection = new SqlConnection("Data Source=ws12\\SQLEXPRESS; Initial Catalog=Song; Integrated Security=True; User ID=ws12\\Administrator; Password=12345678");
            sqlConnection .Open ();

            try
            {
                System.Data.SqlClient.SqlDataAdapter sqlDataAdapter = new System.Data.SqlClient.SqlDataAdapter("SELECT 区号, 节点号, 歌曲序号, 歌曲名称, 开始播放时间, 歌曲长度, 播放状态, 结束时间, 总播放长度 FROM Song_List  ORDER BY 区号", sqlConnection);

                sqlDataAdapter.Fill(dataSet, "Song_List");

                if (dataSet != null && dataSet.Tables.Count > 0)
                {
                    dataTable  = dataSet.Tables[0];

                }

            }
            catch (Exception e)
            {
            }
            finally
            {
                sqlConnection.Close();
            }
            return dataTable ;
        }

第六步:修改App.config中的地址为:http://localhost:8731/WCFService/

第七步:在宿主程序的窗体中添加两个Button,分别为:“开启服务”、“停止服务”,再添加一个Label,如图:

第八步:宿主窗体的后台代码编写:

    1、添加下述命名空间

using System.ServiceModel;

    2、实例化一个服务宿主host ,即:

private ServiceHost host = null;  //实例化一个服务宿主,host

开启服务的click事件:

private void button1_Click(object sender, EventArgs e)
        {
            host = new ServiceHost(typeof(SQLSercice_Host.WCFService));
            host.Open();
            this.label1.Text = "服务已启动";
        }

停止服务的click事件:

private void button2_Click(object sender, EventArgs e)
        {
            if (host.State != CommunicationState.Closed)//判断服务是否关闭
            {
                host.Close();//关闭服务
            }
            this.label1.Text = "服务已关闭";
        }

第九步:服务器端运行

点击“开启服务”按钮,弹框显示:

将App.config中的地址放在浏览器中,如观察到如下:

点击svcut.exe后面的地址,若出现下图,则说明服务生成成功

点击“停止服务”按钮,弹框显示:

至此,服务器端设计完成!!!

7.3.2 客户端设计

第一步:在上述项目中,点击“文件”——>“添加”——>“新建项目”,左侧栏选择“其他语言”——>“Visual C#”——>“Windows”,右边模板中选择“Windows窗体应用程序”,命名为:SQLService_Client,如图所示,点击确定按钮即可,即在解决方案WCFDemo_1中又新建了一个名为SQLService_Client的项目,来作为客户端

第二步:在上述窗体中,添加一个DataGridView和一个Button,并将Button的Text属性设置为“获取数据库”,如图:

第三步:找到服务器的SQLSercice_Host.exe文件并双击,开启服务

第四步:右键项目SQLService_Client——>“添加服务引用”,弹框显示:

第五步:输入服务器端的App.config中的地址,设置命名空间为:SQLService

如图所示:

这样,客户端就将服务器端的数据库连接服务添加进去了!!!

第六步:编辑客户端窗体的后台代码

 添加命名空间

using System.ServiceModel;//必须添加

按钮“获取数据库”的click事件代码:

 private void button1_Click(object sender, EventArgs e)
        {
            using (SQLService.WCFServiceClient proxy = new SQLService.WCFServiceClient())  //创建代理,用于连接服务器
            {
                System.Data.DataTable dataTable = proxy.GetDataByTable();
                if (dataTable != null)
                {
                    dataGridView1.DataSource = dataTable;//绑定数据源到控件
                }
            }
 }

第七步:运行结果:

至此,该项目开发完毕!!!

 

 

小结:

开发过程中遇到的一个错误:

服务器端的WCFService.cs程序中,数据库连接代码:

SqlConnection sqlConnection = new SqlConnection("Data Source=ws12\\SQLEXPRESS; Initial Catalog=Song; Integrated Security=True; User ID=ws12\\Administrator; Password=12345678");

引号中,如果将“\\”变为“\”就会报无法识别的转义序列的错误,上网查资料,得到解决方法是,一定要写成双斜杠!