日期:2014-05-19  浏览次数:20827 次

C# winform下的几大难题?高分求救!
难题一:
SqlCommand对象能够执行删除条件约束的语句吗?
cmdClient.Connection   =   connClient;
cmdClient.CommandText   =   "alter   table   CW   drop   constraint   FK_CW_CK ";
cmdClient.ExecuteNonQuery();
条件约束FK_CW_CK在在数据库中绝对存在,当执行完这两句时,提示错误信息 "条件约束FK_CW_CK "不存在,可是打开数据库一看,条件约束已经被删除了,但为什么会出现这种提示错误,如何解决在执行完这几条语句时不报错?

难题二:
在webservice服务器端与winform架构的系统中,如何从客户端取得服务器端配置文件中的连接字符串?在客户端的窗体代码中写程序实现.

难题三:
在webservice服务器端与winform架构的系统中,在服务器端建立的类型化的数据集,如何把其序列化成二进制字节流的方式传回,通过建立服务.
[WebMethod]//返回服務器端的數據集序列化並壓縮後的二進制字節流
        public   byte[]   GetServerDB()
        {
                SqlConnection   conn   =   new   SqlConnection(FLServerConnString);
                conn.Open();
                dsServerDB   dsServer   =   new   dsServerDB();//dsServerDB类型化的数据集,上面绑定有服务器端数据库的表
                string   sql   =   "select   *   from   CW ";
                SqlDataAdapter   da   =   new   SqlDataAdapter(sql,conn);
                da.Fill(dsServer, "CW ");
                return   serverbase.SerializationDataset(dsServer);                
        }
在客户端把其再解压缩,反序列化成数据集,但是在执行序列化的过程中发生错误,如果不是类型化的数据集则正确,这是为什么?
请高手帮帮忙?


------解决方案--------------------
不好意思``字儿太多了``我眼晕... *_*#
帮你顶下吧``
------解决方案--------------------
问题一
在执行
alter table CW drop constraint FK_CW_CK
语句之前先判断该元素是不是存在,还有看一下是否执行两边。你也可以用SQL Server Profiler 跟踪一下执行了那些SQL 语句。

问题二
这个问题我不是很理解,你指的是WebService的链接字符串还是数据库联接字符串,如果是前者,正常的做法应该是在客户端配置文件中进行配置,引用WebService的时候通过配置文件url实现。
参考
http://blog.csdn.net/zhzuo/archive/2005/04/06/338605.aspx

如果是其他配置文件信息,只要通过WebService再提供一个返回信息的接口就行。

问题三
比较简单的处理是把把类型化DataSet,做为非类型化DataSet进行处理。不过这里的强类型属性方法会消失。可以试一下,是不是你的客户端没有对强类型数据集类型的引用。

另外就是.net 2.0中的DataSet有自带的二进制序列化功能,可以试一下。

还有,请检查一下你的代码,在处理类型化数据集时是否有一些地方不对,可以进行调试一下。



------解决方案--------------------
问题一从代码看不出问题来,可能多次调用造成的。
问题二可写在webservice里写一个方法读取数据库配置信息,客户端调用这个方法。
问题三原因在客户端不存在类型化数据集的定义,反序列化时就会报错。可以同时在服务器端和客户端引用这个类型化数据集,也可以在客户端定义类型化数据集,从服务器端取回数据之后,用数据集的merge方法填充到类型化数据集中。