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

使用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();//确认本地表数据更改
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值