xenogear

当知道了某样知识之后,就会发现其实什么都不知道

2005年7月22日

DataSet的Xml序列化问题

MSDN中指出,DataSet序列化是要调用WriteXml产生。但是当我们的一个类中包含有一个类型为DataSet的属性时,直接使用XmlSerializer来做Serialize产生的XML文件中,DataSet是必然带有schema信息的。这样是无可厚非的,如果不这样是无法反序列化的。

可是我们也许有时需要DataSet生成的XML只包括数据,并不关系结构。这样就需要写一个DataSet派生类,同时为了实现XML序列化,需要实现IXmlSerializable接口   class MyDataSet : DataSet, IXmlSerializable
除了默认的构造函数,我们需要一个通过DataSet构造MyDataSet的构造函数

public MyDataSet(DataSet inputDs)
{
 
this.DataSetName = inputDs.DataSetName;
 
this.Prefix = inputDs.Prefix;
 
this.Namespace = inputDs.Namespace;
 
this.Locale = inputDs.Locale;
 
this.CaseSensitive = inputDs.CaseSensitive;
 
this.EnforceConstraints = inputDs.EnforceConstraints;

 
for(int index = 0; index < inputDs.Tables.Count; index++)
  
this.Tables.Add(new DataTable(inputDs.Tables[index].TableName));

 
this.Merge(inputDs, false, MissingSchemaAction.Add);
}

可以通过实现的IXmlSerializable接口函数WriteXml写出不带架构的XML

public new void  WriteXml(XmlWriter writer)
{
 
this.WriteXml(writer, XmlWriteMode.IgnoreSchema);
}

public System.Xml.Schema.XmlSchema GetSchema()
{
 
return null;
}

另,如果还需要反序列化,那么还要实现ReadXml,这样就可以把xml反读回到DataSet中,不过原DataSet的很多结构信息就丢掉了。

public new void  ReadXml(XmlReader reader)
{
 XmlTextReader tr 
= reader as XmlTextReader;
 
bool flag = true;
 
bool hasTables = false;
 
if(tr != null)
 {
  flag 
= tr.Normalization;
  tr.Normalization 
= false;
  
this.DataSetName = tr.Name;
  hasTables 
= tr.Read();
 }
 
if(hasTables)
  
this.ReadXml(tr,XmlReadMode.Auto);
 
if(tr != null)
  tr.Normalization 
= flag;
}

posted @ 2005-07-22 13:25 什么都不知道 阅读(1320) 评论(1) 编辑

2005年5月21日

VB.NET的一个小问题

这样一行c#代码 int i = (int)(8.0/15.0); 结果是0
而在vb.net下Dim i As Integer = 8.0 / 15.0 结果是1,四舍五入了,如果不要四舍五入需要这样修改
Dim i As Integer = Decimal.Truncate(8.0 / 15.0)

posted @ 2005-05-21 10:18 什么都不知道 阅读(641) 评论(0) 编辑

2005年1月25日

Access is denied的问题

最近调试ASP.NET程序的时候总是时常出现
Access is denied
....
<add assembly="*" />
....
的错误信息
需要很长时间才能恢复正常。
尝试过重启iis等都没有用,而且到asp.net临时目录下发现网站的临时目录存在没有访问权限的目录。
郁闷了一段时间
今天偶尔发现了问题所在 http://support.microsoft.com/default.aspx?scid=kb;en-us;329065
原来是与我前不久装的msn desktop search有关,是Indexing的问题。
解决方法按KB上讲的就可以了

posted @ 2005-01-25 22:07 什么都不知道 阅读(2988) 评论(2) 编辑

2005年1月14日

存储过程output参数问题

下面的存储过程,ID1是同时作为输入输出参数的。

CREATE Procedure usp_test
 @ID1 int output,
 @ID int
AS

IF @ID1 = 0
BEGIN
 SELECT * FROM Customers
 SET @ID1 = 1
 end
ELSE
begin
 SELECT Employees.* FROM Employees
 SET @ID1 = 2
end
GO


通过查询分析器直接运行还是通过VS.NET都能正常运行,可是当用ado.net写一个程序调用时,就不一样了。设置ID1这个参数等于0根本没有用,从Profiler来看,ID1一上来就是1,IF那部分不会执行下去。
不过,如果将两个参数调整一下位置就可以了
CREATE Procedure usp_test
 @ID int,
 @ID1 int output
AS .....
有些奇怪,因无从下手找KB,不知道这个是不是ADO.NET的问题,还是其他问题

(1-15更新)

问题好像不是那么简单,今天无论调整成怎样都不行。后来又好了,但是不关次序的问题,而是与设置ParameterDirection.InputOutput还是ParameterDirection.Output有关。而且发现当是ParameterDirectioin.Output的时候,参数设置什么都没有用,都是NULL,存储过程改称

IF @ID1 = 0  OR @ID1 is NULL

就可以了

不过,即使设置了ID1=1也执行不了ELSE的内容,奇怪的问题。

posted @ 2005-01-14 16:31 什么都不知道 阅读(4063) 评论(1) 编辑

2004年12月31日

SQL Server的效率?

前不久,赫然看到了一个同事还在用sp_开头在SQL Server来做存储过程,于是引经据典的给了他msdn的link,说这样会有效率问题。
在很久前帮一家公司的一个存储过程,据说光执行那个存储过程需要好多秒钟的时间,那个存储过程用一个死循环在临时表里面写东西,然后从临时表里用一个很复杂的查询语句查一个东西,直到能查出某个数来才跳出死循环。
还记得去年的一个项目,设计的存储过程开始没有考虑锁表问题,中间出过一些问题。
也许第一个问题是我吹毛求疵了,第二个问题我建议了改数据结构了。
可是数据库效率问题真的应该需要考虑,这个不单单是SQL Server的问题。
像Locking, Transaction等等不是数据库本身就能做到完全满足要求的,是需要做一些工作的。
关于SQL Server调优的书和文章挺多的,可是一般的数据库设计人员都是觉得懂了些SQL就行了,既然SQL是一种语言,就有他的设计技巧和设计方法的。

我觉得下面三本书应该可以解决绝大部分SQL Server 2000的效率问题
Improving .NET Application Performance and Scalability,这是microsoft的Patterns & Practices系列中的一篇
SQL Performance Tuning,Addison Wesley出的一本书
Inside Microsoft SQL Server 2000, MS Press的

posted @ 2004-12-31 10:34 什么都不知道 阅读(855) 评论(0) 编辑

2004年11月27日

datagrid刷新问题

摘要: DataGrid如果绑定了数据之后,会出现下面的情况。当用鼠标选中某一编辑框的情况下,对DataGrid的数据源DataSource进行更新,会出现列xxx不属于table的错误stacktrace最后是.... DataRow.CheckColumn .....出现的前提情况包括:1、对datagrid设置了tablestyle,做了对字段的映射2、在向右拉动了滚动条3、选中的编辑框不是最后一列...阅读全文

posted @ 2004-11-27 19:08 什么都不知道 阅读(2153) 评论(4) 编辑

2004年10月18日

使用Visio DrawingControl的应用开发(补)

摘要: 介绍了如何处理更多的事件(除DrawingControl已有的事件)http://www.cnblogs.com/xenogear/articles/53738.aspx阅读全文

posted @ 2004-10-18 15:33 什么都不知道 阅读(3030) 评论(12) 编辑

2004年10月12日

突起效果的Label

摘要: 现成的Winform下的Label控件的三种BorderStyle没有突起效果的,None, FixedSingle, Fixed3D。要做个突起效果的,就继承一个Label来做。里面加上:protectedoverrideCreateParamsCreateParams{get{CreateParamscp=base.CreateParams;cp.ExStyle&=(~NativeMe...阅读全文

posted @ 2004-10-12 20:59 什么都不知道 阅读(1459) 评论(4) 编辑

2004年10月10日

WinForm下TextBox的数据绑定和更新

摘要: 一直以来在Form上的TextBox要显示数据库内容,通常就是直接赋值。看了http://www.15seconds.com/issue/040908.htm上讲的要做对应类,现在来说,ORM没什么做的特别好的,所以这么做还是有些累。http://tech.ccidnet.com/pub/article/c1138_a9879_p1.html里面介绍也只是单向绑定,而且实现的不是很好。于是就想直接...阅读全文

posted @ 2004-10-10 13:45 什么都不知道 阅读(3894) 评论(2) 编辑

2004年10月6日

使用Radio按钮选择DataGrid行

摘要: (读自http://www.dotnetbips.com/displayarticle.aspx?id=147有源代码下载)这个问题的出现是因为RadioButtons控件是不能直接加在DataGrid的模板列的。因为DataGrid会给每个单选按钮生成一个唯一名,这样这些单选按钮就不是一个组的了。解决问题的办法是,在模板列中加入一个Label控件。在DataGrid的ItemDataBound事...阅读全文

posted @ 2004-10-06 14:26 什么都不知道 阅读(2305) 评论(2) 编辑

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

导航

统计

公告

昵称:什么都不知道
园龄:7年8个月
粉丝:2
关注:0

搜索

 
 

常用链接

随笔分类

随笔档案

文章档案

最新评论

推荐排行榜