WCF和DataSet

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

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

  客户端也可以正常地接收对应的数据,但现在问题是客户端所作的修改,怎样提交到数据库上面??
...全文
269 点赞 收藏 11
写回复
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执行还不如直连数据库来的直接.
回复 点赞
发动态
发帖子
Web Services
创建于2007-09-28

1.1w+

社区成员

1.6w+

社区内容

.NET技术 Web Services
社区公告
暂无公告