Fill 与 ReadXml 的混合使用

DataAdapter有个Fill方法,可以填充DataSet,DataSet有个ReadXml方法,可以读取XML来填充。

在CSDN上看到有人在问ReadXml与Fill的运行顺序为什么不能互换?觉得有些有趣,做了一番粗浅的观察,发现

1。
DataSet objDataSet = new DataSet();

objDataSet.ReadXml( strXmlFile );
–>生成新的表

objDataAdapter.Fill( objDataSet, “tblProducts” );
–>如果这里的东西与前面生成的表的Schema以及表名一样的话,会填充到前面一个表内,否则会另生成一个表:

2。
DataSet objDataSet = new DataSet();

objDataAdapter.Fill( objDataSet, “tblProducts” );
–>生成新的表tblProducts

objDataSet.ReadXml( strXmlFile );
–>
  a. 如果你的XML文件里有Schema,并且如果这里的东西与前面生成的表的Schema以及表名一样的话,会填充到前面一个表内,否则会生成一个新表

  b. 假如没有Schema,而且DataSet推出的Schema与前面表相同的话,并且表名一样的话,会填充到前面一个表内,如果表名不同,不会读数据进来!即,ReadXml不起作用

  c.假如没有Schema,而且DataSet推出的Schema与前面表格不同的话,不会读数据进来!即,ReadXml不起作用

还发现,好像XML文件里的根节点名与现有DataSet名是否相同是无关紧要的

建议大家别这么用,你会搞糊涂的

Visio 中文版的翻译错误

这几天在整理一些利用 Visio 进行数据库建模的资料,无意中发现一处明显误导用户的翻译错误,如下图所示:

  

为什么要说是“明显误导”呢? 因为在数据库建模的时候,当在 Visio 中把概念模型(使用 ORM Source Model)建立好之后,接着就是建立逻辑模型,即新建"数据库模型图",逻辑模型可以由概念模型正向工程得到,所以在把概念模型的图加入到项目中后,这个"Build"菜单就是关键一步,翻译成"版本"意思就差别十万八千里了,害得我好半天没找到如何实现这个功能。按照 mvm 的话来说,就是“Microsoft 也不找个人 Review 一下,这么明显的错误高中生都能发现 …”

另外,要想在 Visio 中进行全功能的数据库建模,必须使用 Visio 2000 Enterprise,或者是 Visio 2002 for Enterprise Architect (VEA),而在 Office 2002/2003 中的 Visio Stardard/Profession 都没有全程建模能力,即不能建立概念模型,也不能正向工程建立数据库或生成 DDL,曾尝试着把 VEA 中的模具加到 Visio 2003 中,但以失败告终,不知什么时候 Visio 2003 也有全程建模的能力,难道等 VS.NET 2005 ?

另外,一直觉得 Visio 有些地方做得不好,形状的颜色选择列表没有和其它 Office 的应用程序统一起来,显得很老土,幸亏 Visio 2003 中增加了一些很可爱的 3D 形状,大大增加了画图的乐趣。

也曾尝试着用过其它绘图工具,SmartDraw 虽然好用,但图形也很难看,前两天用了一下著名的建模工具 ERWin ,其中的图形更难看了,而且不支持 Undo/Redo 功能,在 Windows 应用程序中,尤其是创作工具中,没有 Undo/Redo 功能会死人的,回头有机会和 PowerDesigner 比比。

查看:Visual Studio .NET Enterprise Architect 中基于 Visio 的数据库建模:第一部分 | 第二部分 | 第三部分

SQL Server Reporting Service SP1发布

Microsoft® SQL Server™ 2000 Reporting Services 的该 Service Pack 1 (SP1) 版本包括修补程序、性能增强和部分功能增强。

主要的功能增强
  • Excel 呈现扩展插件已经过改进,现在可以在较早版本的 Excel 中支持查看功能。
  • PDF 呈现扩展插件更加强健并具有更出色的性能。
  • 图表控件可以更好地控制显示样式。
  • 现在支持从报表内部引用外部 URL(图像和资源)。
  • 增强了报表预览功能的数据缓存行为。
  • 现在支持在表达式中使用换行符。
  • 现在可以通过样式表修改 HTML 查看器工具栏的样式。
  • 新的 URL 参数为运行时自定义报表显示提供了更多选项
  • 报表管理器代理保留了身份验证 cookie,以便自定义安全扩展插件使用它们。
  • 现在支持隐藏的参数。
  • 可以压缩临时快照并将其存储在文件系统上。
  • 可以禁用对访问报表数据源的集成安全性支持。

可以在http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=580FEBF7-2972-40E7-BCCF-6CD90AC2F464#filelist  下载。

如果你原来使用水晶报表,建议你试试Reporting Service笑脸

High Tech TV Home

Microsoft Insider 的站点上,最近发布了一些高技术在家庭中的应用的 TV Show,非常精彩!

内容涉及:

  • 未来的家庭
  • 数字音乐
  • 财务记录
  • 家庭用具
  • 汽车
  • 游戏
  • 个人生产力
  • 移动能力
  • 电视及影像

还没有来得及全部看,只看了其中一小部分,就足以激动人心:

  • 在微波炉有条形码(Barcode)识别器,食品放入之前,扫一下条形码,系统自动选择最合适的加热温度和加热时间,并且在完成后向其它家庭设备(如电视等)发送通知信息;
  • 可以利用灯光来变换墙体的颜色,以自动营造不同的气氛;
  • 语音识别设备,可以回答你的问题,如时间等;
  • 利用条形码或RFID,系统可以将食品的烹饪建议,方法显示给你;
  • XBOX Live 的 Friend List 可以让大家一起玩游戏;
  • 利用一个平板电脑上的非常易用的界面,就可同家庭成员进行各种通讯,Voice、Text、Video、甚至还可以发送拥抱与 Kiss;
  •  … …

不仅要听、要看。还要下载下来收藏,多好的技术+英语的教学片呀!

查看:Microsoft Insider 站点  |  Microsoft High Tech TV Home

PHP 移植的几点经验

最近帮别人忙将一个在 Linux 上的 PHP + MySQL 的小系统移植到 Windows 上,PHP 不变,数据库改用 SQL Server ,整个移植过程挺简单。

1、环境

  • 在 Windows 上安装 PHP ,注意要将 PHP\sessiondata 的目录设置为 IUSR_Machine 用户可写
  • 在 IIS 中建立 PHP 的虚拟站点,如果是 IIS 6.0,新增加一个 PHP 的 CGI 扩展并启用之
  • 修改 PHP.ini ,使 PHP 可以连接 SQL Server,extension=php_mssql.dll,并更改 session.save_path (Linux 上一般是 /tmp,Windows 上是 C:\PHP\sessiondata)
  • 在 Windows 上安装 MySQL、MySQL Control Center(可选)、MySQL ODBC Connector。

2、数据库

  • 将 MySQL 的数据备份文件恢复
  • 在 SQL Server 中新建 DB,并使用 DTS 将 MySQL 的 DB 导入
  • 可以还要做少许设置,将一些未能导入的设置还原,如 Key、Index、Auto Increment 列等
  • 在新数据库建立专门的 PHP 访问登录用户

3、应用

  • 将 MySQL 的数据库连接参数改成 MS SQL Server ,参数都差不多,无非 Server、DB Name、UserName 和 Password 等;
  • 将所有 PHP 页面中的 mysql_XXX 函数替换成 mssql_XXX   函数,唯一不同的是没有 mssql_error 这个函数;
  • MySQL 的 SQL 中可以用 “’” 来加在表名的两端,这在 SQL Server 中是非法的,将其替换成空(替换成 [ ] 也可以,但太麻烦);
  • MySQL 的 SQL 中使用 LIMIT m,n (从 m 条开始取 n 条记录)来实现分页,SQL Server 中没有这样的功能,只能使用 TOP 和子查询来实现了

如 SELECT * FROM Orders ORDER BY ID DESC LIMIT 10,5 ,可以变成:

SELECT TOP 5 * 
FROM ( SELECT TOP 5 * 
                  FROM ( SELECT TOP 10+5 *
                                     FROM Orders
                                     ORDER BY ID DESC ) Temp1
                  ORDER BY ID ASC ) Temp2
ORDER BY ID DESC

之所以用这么复杂的 SQL ,是为了保证只取出有限行的数据,并且排序保护不变,不过效率未知

  • 将一些 SQL 的关键字予以处理,在 MySQL 中,User、Size、Language、Top 等都可以使用,但要在 SQL Server 的 T-SQL 中使用,则必须要在两边加 [ ] 了。


基本上就改这么一些东西,如有必要,再更改一下默认首页的名称,就可以完全正常使用了。

Infopath 的这些问题,你碰到了吗?

平常有很多表格要填,想节省点力气,有幸深入地使用了一下 Infopath,发现问题还不少。

1、如果直接设计界面,在生成的 Schema (XSD)中,所有字段全部都在 Root 下,即使在“数据源”中增加了组(组中的元素是 Ref  根元素下的 Element 定义),这样不同组中想要设计同名字段不可能。;

2、Field 和 Group 上不能自定义 NameSpace 以便区分;

3、开发功能不好用,用 Microsoft Script Editor ,VBScript 和 JavaScript 调试不方便,和 .NET 集成的功能还没有使用;

4、不能在 XSN 中直接更改脚本的类型(VBS<–>JS),只能手动修改 Extract 后的单个文件;

5、Object Model 很乱;

6、奇怪的事件(在一个组上设置了 OnAfterChange ,结果只要组中任何一个控件的值有变,则这个事件被 Activate 20 几次);

7、Office System 的诸多公共特性尚不支持;

8、如果是用外部的 Schema 来 Design Form ,则完全不能增删改数据源,即使修改了最初的 Schema ,Infopath 中也不会变化;

9、矢量字体支持较差,没有 9 号字体;

10、数据源中的 Filed 竟然不能上下移动(SP1 Preview 中可以了),在不同的组之间移动时,操作很不方便,不支持鼠标拖动。

SecIssue

如何更好的利用MSDN资源

刚写完一篇《中国论坛文化之批判》,感觉到有责任提供一些解决问题的办法。其实初哥们最简单也最入效的学习方法应该是自已动手去做一些题目,并且试图自己解决,而不是动不动就去问人,很多东西,尤其是微软的相关产品的解决方案往往就在文档中提出了,不懂得利用手中的宝库,而甘愿去叫别人爹,除了自贬价值,徒增别人鄙视外,不会有任何好处。

如果你玩.NET,那么你的最佳明师应该是MSDN For Visual Studio.NET,对于初哥,所有.NET的入门书籍完全可以抛充掉,不要去买那些什么几日通之类的书籍,只是浪费你的银子而已,如果你感觉你的银子多,爹妈赚得容易的话,还不如拿出去做一些慈善捐善,阿弥陀佛。

安装完Visual Stuido.net的话,一定要完全安装文档(即MSDN For VS.NET),这是一个离线的MSDN宝库。如果你英文不好,MSDN与.NET相关的,已经完全汉化了,这些文字从入门到精通以及技巧还有参考全部涵盖,打印出来估计得将近万把页了,比你买那些几日通的东西要好得多的多!

比如说,我现在对于多线程编程还茫然无知,想知道如何入门,那么,我只要在MSDN的“索引”当中输入“线程”两个字,就会罗列出一大堆选项,供我学习,如果你是想系统的学习,好,在上面的工具栏当中按一下那个双方向的箭头(Tooltip是“同步内容”),即可以把它当书一样进行系列学习。

再比如我对一个类(比如ThreadPool)的定义不太清楚,那么我可以直接在索引当中输入“ThreadPool 类”或者“System.Threading.ThreadPool 类”(注意“类”前面的空格),那么你就可以得到关于这个类的所有内容,以及相当部分的示例。

再不行,你可以使用“搜索”选项卡,输入你需要的关键字进行搜索。

MSDN,肯定比你叫“爹”管用!

中国的论坛文化之批判

今天早上在公交车上看了新一期的《程序员》杂志,里面韩磊的两个小品文章吸引了我。名字叫“感悟两则”,其中的第二篇《男儿膝下有黄金》更会让现在的论坛初哥深思。

他在论坛上看到这样一个贴子,标题是《菜鸟问题,冰天雪地赤身裸体前空翻360度接侧空翻720度跪求答案,在线等待》,我想常去CSDN或者开发者俱乐部等技术论坛逛的人对这些标题应该不陌生吧?或者是一种潮流吧?现在的初哥们都把自己的境地描述的多么悲惨,多么的困难,以便博取大家的同情,帮助他解决问题,可是当你点击进去后,会发现里面的问题是多么的让人不值一提。

这不,今天早上,我又要CSDN发现一篇贴子,标题是《谁要能解决我叫他一声爹!!!!! 》,我以为是啥惊天地泣鬼神般的问题呢哭泣的脸

再来看看我的BLOG,关于SPS做外网门户的。请注意在该文后面我所加的评论,以及大家留在那儿的索要下载地址的邮件,虽然我一再强调我已经在后面的贴子里面提供下载了,可是有几个真正耐心的看一下的?

中国的程序员咋就缺少动手能力呢?长此以往,国将不国呀悲伤的脸

"DERIVEDTBL": SQL Server 保留关键字 ?

今天在 MS SQL Server 2000 Enterprise Manager 的 SQL 窗格中调试如下 SQL 语句:

SELECT TOP 10 *
        FROM (SELECT TOP 20 *
                FROM news
                WHERE class = 001
                ORDER BY pubdate DESC)
        ORDER BY pubdate

发现 SQL 窗格执行后在将原始的 SQL 改动了,自动增加了一个  DERIVEDTBL ,变成如下这样了:

SELECT TOP 10 *
        FROM (SELECT TOP 20 *
                FROM news
                WHERE class = 001
                ORDER BY pubdate DESC) DERIVEDTBL 
        ORDER BY pubdate

这个 DERIVEDTBL 还真让我费了一点劲,以为是新的保留关键字,可是在 SQL Server 的 Online Help 中没有找到,在 Google 也没找着这个单词的解释。

后来无意中把 DERIVEDTBL 改成 Temp 发现也能用,汗~~~,原来是 SQL 窗格只是给子查询增加了一个别名而已。

唉,真是吃了没文化的亏了,谁让咱 SQL Server 学/用得少呢。

建议把这个作为招聘 SQL Server 相关人员的一个面试题。

团队日历Web部件及MSN Messenger机器人

在使用Outlook/Exchange的时候,如果你使用日历来安排自己的日程,那么在通过Exchange就能够得到你自己的忙/闲信息,从而合理的安排时间,比如你的同事可能会根据你的忙/闲信息来选择一个合适的时间段来安排一次会议。当然,使用Outlook 2003在新建会议的时候,你可以在“计划”中得到所有参与人员的忙/闲信息。如果能够在Microsoft SharePoint Portal Server 2003或者Microsoft Windows SharePoint Service 2.0里面集中的显示某个部门及成员的所有忙/闲信息,对于安排一次部门活动来说,会更加直观。

如果你遇到这种情况,可以尝试使用一下我这两天开发出来的团队日历Web部件,软件效果图如下:

使用该部件,可以显示出来你指定的成员的忙/闲及外出信息,所有成员不需要维护此数据,只需要使用Outlook安排自己的日程,即可对显示信息进行自动更新。

安装后,请先进行一下初始设置,在其Exchange Server属性中指定本单位的Exchange Server的地址(

目前不支持https协议),注意,一定要加上public及最后的反斜杠。然后选择数据来源,此属性指定所要显示成员的数据来源,如果你选择了手工输入,那么请在其下的“用户邮件”属性中一一输入成员的邮件地址,用“;”进行分隔,也可以选择“门户成员”,则会自动显示该门户成员的忙/闲信息,不需要手工指定,最后一个选项是通过指定团队领导,则会把该领导的下属成员全部包括进来(此属性尚未实现)。

注意:为使该WebPart有权访问Exchange,请把信任关系更改为Full,否则您会得到一个权限异常。同时,该dll未加强名称,所以不要试图在GAC中安装。

前段时间曾经发布过一个更改域用户密码的Web Part,不过在dwp文件中有一个bug,可能使很多朋友遇到了困扰,安装不成功。我现在已经把更新版本的Web Part一起打入了安装包,您可以一起使用。

如果您是本人的MSN Messenger的线上好友,那么这两天晚上可能会发现有一个机器人老跟你逗着玩。如果您对此感兴趣,可以在下列地址找到该机器人的下载地址,该机器人使用的是DotMSN,一个免费提供的MSNP协议的纯.NET程序集,该程序集可以在http://members.home.nl/b.geertsema/dotMSN/ 中找到。

点此下载团队日历及域用户密码更改Web部件(失效)

点此下载MSN Messenger机器人(失效)

由于空间有限,请从快下载,本周末(2004-6-5)该下载链接将无效。