zoukankan      html  css  js  c++  java
  • WinCE中C#WinForm利用Web Service查询数据库

    WinCEC#WinForm利用Web Service查询数据库

     

    这段时间做一个WinCE数据库项目,WinCE需要通过网络访问SqlServer服务器。根据条件读取数据并保存到SqlSC中。

    刚开始由于服务器设置等问题,PullPush或者直接用ADOCE访问数据库,均抱错。连接不上数据库。

     

    就在快崩溃的时候,同事提议用WebService试一下。琢磨了半天,终于能让WinCE访问数据库了,虽然是间接的!

     

    1、首先建立一个WinCE项目和一个ASP.Net WebService应用程序。

    1、新建一个WebService应用程序。

    新建WebService后,会出现一个HolloWorld函数。如下所示:

            [WebMethod]

            public string HelloWorld()

            {

                return "Hello World";

            }

    我没做过Asp.Net的东西,对Asp.net不熟悉。于是就试着在它的下边添加我自己的函数即可。结构如下:

     

            [WebMethod]

            public string fun1()

            {

                return "Hello World";

            }

    F5即可看到程序中的两个函数HelloWorldfun1。在浏览器中点击这两个函数就可以看到调用它们的结果了。

     

    2、在WebService中添加数据库访问函数

     

    确定这么写WebService函数后开始添加数据库访问函数。

    要访问数据库,必须添加对System.Data.SqlClient的引用因此,首先在文档头添加了如下引用:

    using System.Data.SqlClient;

     

    下边是一个测试能不能连接到数据库的函数:

     

            [WebMethod]

            public bool test()

            {

                string connStr = "server = 10.0.0.172;database=mydb;uid=sa;pwd=123456";

                try

                {

                    SqlConnection conn = new SqlConnection(connStr);

                    conn.Open();

                    bool b = true;

                    conn.Close();

                    return b;

                }

                catch

                {

                    return false;

                }

            }

    F5在在浏览器中看见两个函数。点击test函数调用他后可以看到如下结果:

      <?xml version="1.0" encoding="utf-8" ?>

        <boolean xmlns="http://tempuri.org/">true</boolean>

    这是个XML文件。WebService传递数据是用过XML的形式传输的!

    说明返回结果为true。访问数据库成功。

     

    3、读取数据库中的内容

    需要使用Dataset作为载体返回数据库中的数据。因此,添加了对System.data的引用:

    using System.Data;

    下边是我写的一个试验用的函数:

            [WebMethod]

            public DataSet reader()

            {

                string connStr = "server = 10.0.0.172;database=mydb;uid=sa;pwd=123456";

                try

                {

                    string sqlStr = "select * from admin";

                    DataSet ds = new DataSet();

                    SqlDataAdapter da = new SqlDataAdapter(sqlStr, new SqlConnection(connStr));

                    da.Fill(ds);

                    return ds;

                }

                catch (Exception exp)

                {

                    return null;

                }

            }结果数据显示的很乱,就不贴了。看到的结果都是XML格式的。

     

    4、新建WinCE项目,并添加Web引用

    在解决方案中添加WinCE项目。命名为SDP

    此处需要注意的是:在点击添加Web引用后的窗口中有三个选项:

    §  此解决方案中的 Web 服务

    §  本地计算机上的 Web 服务

    §  浏览本地网络上的 UDDI 服务器

    这三个选项都不能直接使用!

     

    点击此解决方案中的 Web 服务,在窗口上边的地址栏出现如下地址:

    http://localhost:49350/Service1.asmx

    localhost替换成泥计算机的IP,然后才能在PDA中引用,否则WinCEhttp://localhost:49350/Service1.asmx的解析将出现问题,很简单的问题。这样添加也会由于配置不正确而出现访问不了的问题!

     

    最好是将WebService发布到IIS后再添加到WinCEWeb引用。(我是这么用的)添加的引用名为WebRef

     

    5、在WinCE项目中调用WebService函数

    添加引用:

    using SDP.WebRef;

    6、在程序中调用WebRef中的函数

    首先我测试调用HelloWorld函数。响应一个button点击事件:

            private void button1_Click(object sender, EventArgs e)

            {

                Service1 svs = new Service1();

                MessageBox.Show(svs.HelloWorld());

            }

    测试结果抓了个图,如下:

    7、调用刚才写的那个访问数据库的函数

    第一步,确保项目中有对System.Data.的引用

    using System.Data;

    第二步:定义一个DataSet用于接受函数返回

    第三步:用Datagrid显示数据

    重写后响应button点击事件的代码如下:

            private void button1_Click(object sender, EventArgs e)

            {

                Service1 svs = new Service1();

                //MessageBox.Show(svs.HelloWorld());

                DataSet ds = new DataSet();

                ds = svs.reader();

                this.dataGrid1.DataSource = ds.Tables[0];

            }

    也抓了个图

    8、这样对数据库的访问就完成了。

     

    Ps:对于单独的应用,这样访问数据库较慢,而且得配置IIS服务器,挺麻烦的。还体现不出来Webservice的优势.只能作为WinCE实在无法访问数据库时的下策使用!

  • 相关阅读:
    力扣(LeetCode)验证回文字符串II 个人题解
    力扣(LeetCode)寻找数组的中心索引 个人题解
    力扣(LeetCode)验证回文串 个人题解
    力扣(LeetCode)三个数的最大乘积 个人题解
    力扣(LeetCode)二进制求和 个人题解
    力扣(LeetCode)加一 个人题解
    力扣(LeetCode)整数反转 个人题解
    力扣(LeetCode)颠倒二进制位 个人题解
    力扣(LeetCode)最后一个单词的长度 个人题解
    力扣(LeetCode)学生出勤记录I 个人题解
  • 原文地址:https://www.cnblogs.com/zyqgold/p/1658734.html
Copyright © 2011-2022 走看看