WCF和DataSet

hotyei 2010-11-09 01:04:47
各位高手请指教:

  定义了这样一个契约,返回一个数据集:
  DataSet GetData(string SQLStr);

  客户端也可以正常地接收对应的数据,但现在问题是客户端所作的修改,怎样提交到数据库上面??
...全文
323 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobo 2010-12-23
  • 打赏
  • 举报
回复
DataSet.GetChanges()传递到服务端即可!
hotyei 2010-11-19
  • 打赏
  • 举报
回复
谢谢楼上。
lhzyn 2010-11-17
  • 打赏
  • 举报
回复
findcaiyzh所说的类型安全的意思是,已经定义好的有固定的属性或字段的类型,例如他定义的class Contact,
Dataset的不安全就在于,它存储的内容的属性是动态的,某个表可能有可能没有,表里面的字段也是不确定的.
使用Dataset作为DataContract一般都是不得已实在没办法时的选择.
对于这个:
这样的方法固然可行,但如果数据量非常大的情况下(如100000笔记录),如果我仅仅修改了一笔资料,这样会不会出现客户端重新将这100000笔资料重新回传到服务端的情况。如果真是这样,那么速度就会非常的慢。
你应该在程序里做好控制,保证提交的Dataset中都是需要更新的数据.
hotyei 2010-11-10
  • 打赏
  • 举报
回复
谢谢各位!

由于我们使用了用户自定义字段(客户自已向数据库添加一些字段),所以不能使用List<对象类别>的方式将数据传送到客户端,而必须使用DataSet的方式。

还望高手说一下使用DataSet有什么不好,类型安全又是指什么呢?
机器人 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hotyei 的回复:]
上面两位高手,你们好!

通过:
void UpdateDatabase(DataSet _DataSetToUpdate);

这样的方法固然可行,但如果数据量非常大的情况下(如100000笔记录),如果我仅仅修改了一笔资料,这样会不会出现客户端重新将这100000笔资料重新回传到服务端的情况。如果真是这样,那么速度就会非常的慢。
[/Quote]

DataSet里只保存修改的一笔数据。。。
Devillyd 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 findcaiyzh 的回复:]
那就最好别用Dataset了,dataset不是类型安全的。

可以使用这样的
[DataContract(Namespace = "*****", Name = "Contact")]
class Contact
{
[DataMember(Order = 1)]
public int ContactId{get;set;};

[DataMember(Order ……
[/Quote]
宝_爸 2010-11-10
  • 打赏
  • 举报
回复
那就最好别用Dataset了,dataset不是类型安全的。

可以使用这样的
[DataContract(Namespace = "*****", Name = "Contact")]
class Contact
{
[DataMember(Order = 1)]
public int ContactId{get;set;};

[DataMember(Order = 2)]
public string FirstName{get;set;};

[DataMember(Order = 3)]
public string LastName{get;set;};

[DataMember(Order = 4)]
public string Email{get;set;};

}

List<Contact> GetContacts(string SQLStr)
{
}
void UpdateContact(Contact newContact)
{
//根据Id更新数据库。
}

注意:以上代码没有经过编译,可能有些许错误。
潇洒王子 2010-11-10
  • 打赏
  • 举报
回复
直接根据ID修改记录,返回数据库即可,别搞的 太复杂
hotyei 2010-11-09
  • 打赏
  • 举报
回复
上面两位高手,你们好!

通过:
void UpdateDatabase(DataSet _DataSetToUpdate);

这样的方法固然可行,但如果数据量非常大的情况下(如100000笔记录),如果我仅仅修改了一笔资料,这样会不会出现客户端重新将这100000笔资料重新回传到服务端的情况。如果真是这样,那么速度就会非常的慢。
MarcuseXiao 2010-11-09
  • 打赏
  • 举报
回复
可序列化的类型(DataSet,或者自定义的DataContract)都可以作为参数进行调用的,跟类调用一样的
lhzyn 2010-11-09
  • 打赏
  • 举报
回复
客户端既然可以接收DataSet,当然也可以把修改后的DataSet提交到WCFService进行数据库更新啦.
你可以在契约中定义一个方法例如
void UpdateDatabase(DataSet _DataSetToUpdate);
另外
既然使用了WCF,最好不要定义这样的方法DataSet GetData(string SQLStr),把Sql语句传到WCFService执行还不如直连数据库来的直接.

12,166

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧