使用DataConnectionDialog来获取连接字符串

在系统开发中,数据库连接字符串经常被保存到.config/.ini等配置文件中,以提高系统的灵活性。上大学时候,为了实现灵活配置数据库的效果,用拼字符串的方 法来动态生成连接字符串,这种方法充满了Bad Smell。

昨天用CodeSmith时候,看到它的数据连接配置界面,如此的眼熟,如下图。

image

Google了一下,原来这家伙的名字叫做DataConnectionDialog,所属命名空间为Microsoft.VisualStudio.Data。

使用的方法也很简单,引用Microsoft.Data.ConnectionUI.dll和Microsoft.Data.ConnectionUI.Dialog .dll,这两个文件位于Microsoft Visual Studio 9.0Common7IDE下面。

这两个dll并没有其他依赖关系,可以放心的放到自己的程序中使用。

使用代码如下

DataConnectionDialog dataConnectionDialog = new DataConnectionDialog();
DataSource.AddStandardDataSources(dataConnectionDialog);
if (DataConnectionDialog.Show(dataConnectionDialog) == DialogResult.OK ...
more ...

在.net中使用GAC

GAC

GAC是什么?是用来干嘛的?GAC的全称叫做全局程序集缓存,通俗的理解就是存放各种.net平台下面需要使用的dll的地方。GAC的具体目录在windows/ assembly。

喜欢使用破解软件的朋友可能会经常使用替换DLL这招,这个DLL虽然和.net下面的DLL有所不同,但大致起的作用还是一样的:使用共同的动态链接库来提高库复用 ,减少文件体积。在.net平台之前,程序们都把可能用到的公共DLL存放到system32文件夹下。由于版本的不一致及其他原因(将控制信息存放到注册表),造成 了很有名的DLL Hell

最近在读俞甲子的《程序员的自我修养》,中间花了很大的篇幅描述程序编译中 的链接这个过程。而比较巧合的是,我的《C#与.NET 3.5高级程序设计》也正好读到程序集这一块。微软使用了GAC来避免DLL重蹈覆辙。现在,我就来部署一个简单的通用类库到GAC中。

获取强名称(签名)

并不是随便一个DLL都可以放到GAC中,如果这样的话,和之前的DLL Hell也没什么区别了。GAC使用一个强名称(签名)的方式来区分不同的DLL。每个签名 都是独一无二的公钥私钥对。现在我们使用SDK的sn工具为我的DUtil库生成一个snk签名 ...

more ...

C#+VBA操作Excel总结

Excel在日常办公中应用非常广泛,这次我接到一个案子,需要往Excel中写入数据并能够打印出固定格式,前前后后大概花了将近2星期才搞定,现在做一些分享。

一、关于操作Excel的几种方式

我们导出Excel,大抵是有两种方法,一种是在服务器端用一些类库或者COM组件直接生成Excel成品,其二是在后台只写入数据,而不写入具体格式,等用户下载完 Excel之后再在客户端上利用vba生成Excel成品。

1.1使用"自动化"功能-后台生成成品

微软把后台使用COM组件称之为"自动化",其实它本身是不建议这种用法,在257757 号文章(服务器端 Office 自动化注意事项)也明文标出"Microsoft 目前建议不要从任何无人参与的、非交互式客户端应用程序或组件(包括 ASP、DCOM 和 NT Service)中进行 Microsoft Office 应用程序的"自动化",也不为此提供支持,因为 Office 在这种环境中运行时可能会出现不稳定的现象并且/或者会死锁。"

这种方法的优点是给用户更简洁的展现,毕竟原生的Excel成品比半成品来更容易接受,而且可以避免宏安全问题 ...

more ...

PDA"未能建立与网络的连接"的解决办法

遇到这个问题大凡是因为模拟器或者真机无法连接网络,所以需要先测试网络是否畅通,在真机或者模拟器的IE中打开需要的WebService地址,看看是否能够正常获 取。

确定是网络原因后,可以采用多种方式连接网络,比如使用虚拟网卡来实现,又或者使用ActiveSync来实现。

使用本地网卡

在模拟器的文件-配置中的网卡中,选择本地网卡,可能会需要提示安装Virtual PC 2007,我不愿意装这么一个大家伙,也就没有尝试这种方法,需要的朋友可以在Download details: Virtual PC 2007来下载Virtual PC 2007进而连接互联网。

使用ActiveSync

ActiveSync是一个连接Win系列手持到电脑的同步软件,通过它可以使真机或者模拟机连接网络,步骤如下。

1、打开ActiveSync ,点击文件-连接设置,在"允许连接到以下其中一个端口"下选择 ...

more ...

VS2005无法创建或打开"智能设备"项目的一个问题的解决方法

状况

在VS2005中创建或打开"智能设备"项目时,提示以下错误: "从用户数据存储中检索信息时出错。系统未找到指定的对象。" 和 "由于数据存储中不存在项目引用的设备平台,因此无法打开项目。"

在打开VS2005的"工具"-"设备仿真器管理器"时,提示以下错误: "未能正确加载包"Smart Device Configuration Package"( GUID = {D245F354-3F45-4516-B1E6-04608DA126CC} )。请与包供应商联系以获得帮助。由于可能会发生环境损坏,建议重新启动应用程序。要禁止将来加载此包吗? 可以使用"devenv /resetskippkgs"重新启用包加载。"

不成功的解决办法

有说把.csproj文件中的<PlatformID>4118C335-430C-497f- BE48-11C3316B135E</PlatformID>改成<PlatformID>3C41C503-53EF-4c2a- 8DD4-A8217CAD115E</PlatformID>,原因说是"3C41C503-53EF-4c2a- 8DD4-A8217CAD115E"来自任意一个能运行的.net cf2.0项目的.csproj文件 ...

more ...

MemberShip使用心得

花了很大一段时间在学习MemberShip,总是要留下一些纪念文章的。 我之前的日志提到过一个简单的用户权限设计:User+Role+UserInRole(http://log4d.com/2009/06/design-of-user-rights),但是这样还是不够灵活,最好需要能够对每一个功能模块进行权限控制,而且需要符合开闭原则。 MemberShip呢,是微软推出的一套很强大的用 户权限管理系统。就我使用的两大部分,主要包括MemberShip和roleManager这两个模块,分别是对用户和角色进行管理。

MemberShip对系统进行管理大致分为两个办法

1.可以通过"登录"系列用户控件的任务窗口中的"管理网站"打开"ASP.Net Web 应用程序管理"。 可以控制用户、角色、权限三个主要属性,另外还能选择 "提供程序"(这个provider分为MemberShip和RoleManager两种,如果同名的话,可以选择同一提供程序) userControl userManager 2 ...

more ...

ThisHouse房屋销售系统

呃,这是我在一个星期内搞鼓的一个Asp.NET课程设计,没有什么太多的内容,把它发布到了Csdn了,开了5分,嗯,对得起我一个星期拼命码代码。(哦,我很无耻 的使用了MG12的iNove主题……)

thisHouse

readme.txt内容:

This House房屋销售系统 本人大四一个课程设计,大概花费1周时间,构架2天,编码3天,零碎程序1天,论文1天。

程序写的不好不坏,是DAL+BLL+Model+Web三层架构,使用的动软生成器生成的简单三层框架。压缩包包括源码,数据库,一个star uml简单设计图,数据库文档,需求分析和论文。

系统关键词是: Asp.NET; MemberShip; iBatisNet; AjaxControlToolkit; 房屋销售系统 数据库使用的是一个完整的MemberShip 权限管理系统,而不是我自己写的简单User in Role,所以建议对这个MemberShip有一定了解。

整个系统关注的是框架的使用,对于业务逻辑关注很少 ...

more ...

MemberShip在动软生成器下UserId的问题

背景

这个月的课程设计我抽签是「房屋销售系统」,一个比较简单的类CMS系统。考虑到时间的因素,我放弃了Python in Django,而是选择了我相对熟悉的.N ET平台。我使用的主要工具是动软.NET代码生成器(一个很强大的.NET代码生成器)+Member Ship(微软推出的一个Asp.NET的权限系统)。

我之前只是对MemberShip略有耳闻,动软也是用过几次,所以在一个星期内完成这个课程设计还是比较冒险的。呃```呵呵,这也比较符合我的风格,总是要学点东 西的嘛。

问题

MemberShip本身是一个很强大的权限管理系统,其中UserId使用的是uniqueidentifier这种值类型,对应到微软提出的一种标示类型GUID (System.GUID)。这是一种类似「9498ea1f-ce4e-4e6d-b636-1bbbe3db9bde」的非字符串。

动软.NET代码生成器会根据建好的数据库生成相应的代码,可以选择三层模式(BLL+DAL+Model+Web),他会自动生成每层代码。一般来说,生成的项目可 以编译完成,但是如果在其中存在uniqueidentifier这种类型的表,就会产生错误 ...

more ...

jQuery图片圈人功能在ASP.NET下的改进

项目中需要一个类似于校内圈人效果的js控件,找了一下基本没有直接能用的,只有一些未完成,我只能自己动手了。 基本框架参照这篇文章《JS实现校内网"图片圈人 "功能效果》(强烈推荐这篇 文章,这段代码写的很帅气) 我把代码摘录如下,不过还是建议大家去看原文的一些分析。

原始Code:

运行环境: 1.jQuery支持 2.DragResize类(czy1121作者写的一个js类,更多信息可以参照《Javascript Resize和Drag类,基于jQuery》 )

样式:

#enclose-wrapper {
    position: relative;
    z-index: 0;
    border: 4px solid #DDD;
    background-color: #FFF;
}
#form-add-tag {
    margin-left: 8px;
    position: absolute;
    padding: 5px 3px;
    border: 1 ...
more ...

AjaxControlToolkit中CalendarExtender样式修正

The Official Microsoft ASP.NET Site上有一个很强大的控件AJAX Control Toolkit,其功能非常完整,几乎涵盖了表现层方面各种应用,使用也很方便,有中文详细支持,能给程序员很大帮助。

我现在使用的其中一款控件叫做CalendarExtender,其实是一个DatePicker(日期选择器),这个控件可以直接在Input控件上添加「扩展程序 」,就完成了所有工作。

偏移

让我意外的是,这个控件在我的页面上工作时候样式似乎有些不正常。

页面漂移了!我仔细检查了FireBug,发现下面的样式中的padding影响了其td。(页面可不是我设计的```)

Firebug

如果修改CSS,就带来了大量的页面需要修改class/id,所以我只能修正CalendarExtender。(话说人家jQuery在这儿丝毫不受影响,全部元 素都覆盖了样式,AJAX Control Toolkit在样式上还是不如jQuery ...

more ...