您的位置:首页 > 其它

使用webservice操作强类型数据集时的注意事项

2015-02-06 19:18 309 查看
使用WebService和强类型数据集进行数据操作  作者野人,转载注明出处
首先我推荐使用.NET提供的强类型数据集,理由最少有5个:
1、对象化数据访问
2、强制类型检查
3、可视化
4、减免代码的快速开发
5、自动控件绑定
 
步骤如下:
WebService端
1、建立WebService
2、建立强类型数据集项
3、建立填充数据集的方法和供调用的WebMethod,包括数据读取的提供和数据操作等
4、将做好的WebService发布到网站上
Client端
1、建立访问界面,Winform或ASP.NET
2、引用WebService,注意调试WebService后需要“更新引用”
3、调用引用的WebService的命名空间建立本地强类型数据集项,这个数据集类型因为是WebService端提供的,所以和WebService建立的完全一致
4、用WebService提供的WebMethod方法,从WebService调用数据,并填充到本地数据集,注意要在得到table后加上Copy()方法,就是引入一个副本,加入到本地的数据集里面
5、注意在用本地数据集table更新服务器端数据后,需要加上本地table.AcceptChanges()方法,以刷新本地数据,其实就是重新读入服务器端数据集,避免出现连续提交更新方法的并发错误
 
WebService端代码
using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;
namespace WebService1

{

    /// <summary>

    /// Service1 的摘要说明

    /// </summary>

    [WebService(Namespace = "http://tempuri.org/")]

    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    [ToolboxItem(false)]

    public class Service1 : System.Web.Services.WebService

    {

        public static ProductDataSetTableAdapters.ProductTableAdapter productTA = new WebService1.ProductDataSetTableAdapters.ProductTableAdapter();

        public static ProductDataSet productDS = new ProductDataSet();
        [WebMethod]

        public ProductDataSet GetProduct()

        {

            productTA.Fill(productDS.Product);

            return productDS;

        }
        [WebMethod]

        public int UpdateProduct(ProductDataSet.ProductDataTable dt)

        {

            int row;

            row = productTA.Update(dt);

            return row;

        }

    }

}
Client端代码
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Web;

using WindowsFormsApplication1.localhost;
namespace WindowsFormsApplication1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();
                        service1 = new Service1(); //在构造函数里面实例化WebService代理对象

        }
       
             Private Service1 service1;

             Private ProductDataSet ds1;

             Private ProductDataSet.ProductDataTable dt;
        private void btnGetDate_Click(object sender, EventArgs e)

        {

            try

            {

                //取得WebService数据

                dt = (ProductDataSet.ProductDataTable)service1.GetProduct().Tables[0].Copy();

这里不用复制,直接引用,应该是:
dt = (ProductionDataSet.ProductDataTable)service1.GetProduct().Tables[0];

                dataGridView1.DataSource = dt;

            }

            catch (Exception)

            {

               

                MessageBox.Show("WebService服务器连接失败");

            }

        }
        private void btnUpdate_Click(object sender, EventArgs e)

        {

            try

            {

                int rowChanged = service1.UpdateProduct(dt);//更新服务器端数据,返回被更改的记录数

                if (rowChanged > 0)

                {

                    MessageBox.Show(rowChanged + "行数据被更新成功。");

                }

                else

                {

                    MessageBox.Show("没有需要更新的本地数据");

                }

            }

            catch (Exception)

            {

               

                MessageBox.Show("服务器端更新失败。");

            }
            dt.AcceptChanges();//确认本地表数据更改

        }
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: