大可山博客[十年一日, GDI+,WPF, .Net图形图像]

WPF,WinForms,asp.net开发,图形图像处理系统研究 (Johnson Blog) [信奉:凡事靠自己] MSN:a3news(at)hotmail.com http://www.brawdraw.com

朱继山ID:johnsuna
393152次访问,排名119好友27人,关注者61
深圳报业集团问工网,技术总监
johnsuna的文章
原创 255 篇
翻译 1 篇
转载 44 篇
评论 444 篇
大可山(Johnson)的公告

MSN:a3news(at)hotmail.com,从2007年8月8日起笔名改为:大可山(以前叫阿山Net)
Q:329325120
[这段时间忙,尽量少问我问题。见谅!]
引用本人原作,请注明出处。
最近评论
f26511314:如何让水平滚动条自动显示?
johnsuna:已经可以下载了,示例也可以使用了。
LoveDancy:您好,今天刚找到这个地方,现在很需要您修改后的FreeTextbox版本,可惜现在已经下载不了了,能否发送一份到我的邮箱?感激不尽!
Denny@mcidea.cn
itxgu:Q 我觉得还是有创意的。
johnsuna:换行用的〈BR〉被删掉了,显得没有格式,是CSDN博客的问题。
文章分类
收藏
相册
Chinaphotoshop.Net
报业大厦外摄
程序截图
美丽的深圳
世界之窗
软件开发
你的灯亮着吗?(RSS)
图书出版
大溪水的博客(RSS)
图形图像
C#新型报表工具 XDesigner(RSS)
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 ACCESS中使用GUID全局唯一标识符的自动唯一编号[同步复制ID]之解决方法收藏

新一篇: CSDN博客文章录入/修改的界面改进 | 旧一篇: 利用XSLT及C#.net将SVG转换为XAML

背景:

这段时间临时为一个旅游类网站制作一些网站程序。数据表的情况大致如下: 数据库表汇总 图1 数据库表的大致情况 由于是Access数据库,之前有两个数据表:TC_TourCompany和TC_SubDetail,前者是旅行社名录相关资料(为了方便描述,暂且叫“总公司表”),后者是下属营业部(如果有的话)的相关资料(为方便描述,暂且叫“子公司表”)。

由于业务需要,想将之扩展为适用于所有“公司类”(比如酒店、景区、景点、漂流公司、娱乐餐饮、机票代理、交通公司等)的数据表,由于酒店、餐饮娱乐、机票代理等公司都有可能有分部或分公司,所以表的数据结构是差不多的。所以,我们可以通用这样的数据表设计来简化今后的程序开发。当然,我们需要在数据表中新增一列,用于描述公司的类型是旅行社、酒店、景区或是娱乐餐饮类公司等。不在本文的叙述范围,按下不表。

为了方便今后的分类搜索查询,确保公司(包括子公司)的唯一性,所以,我想在上述两个表中增加一列,我把列名叫做GUID。它的每条记录都是唯一不重复的值,类似:{9E4038C8-E965-45B1-BDE1-9F06E6B280A3},这有点象.Net中的System.Guid.NewGuid()生成的值,并用大括号{}包含起来。

做法: 如何在已有数据库表记录的情况下自动生成每一条记录的这些值呢?

一开始,我走了点弯路。在新增GUID列时,我选择了此列的数据类型为“数字”并在下面常规选项卡中“字段大小”中选择了“同步复制 ID”,索引中选择了“有(无重复)”。本以为这样保存结构之后就万事大吉,最终打开表的所有记录时发现,GUID列完全为空,没有任何值!于是,我想了一些办法去插入GUID唯一值。方案之一是在ACCESS中使用SQL语句更新,后来发现此路不通。方案之二就是使用ADO.net编程方式更新表记录,工作量也不小。

有没有更好的办法呢?一个偶尔的想法让我找到了更快更好的解决办法,那就是在设计视图中建立GUID列时,数据类型选择自动编号而不是数字!同时,在下面常规选项卡中“字段大小”中选择了“同步复制 ID”,索引中选择了“有(无重复)”。

如下图: 设计视图中增加GUID列 图2  给总公司名录表(TC_TourCompany表)增加GUID列

在设计视图中给子公司增加GUID列 图3 给总公司表(TC_TourCompany表)增加GUID列后自动生成GUID记录值 在设计视图中给分公司(分部)表增加GUID列 图4  给分公司(分部)TC_SubDetail表增加GUID列

给分公司(分部)增加GUID列后自动生成GUID记录值 图5 给分公司(分部)TC_SubDetail表增加GUID列后自动生成GUID记录值

以后新增记录时会发生什么?经测试发现,ACCESS会自动搞定生成GUID记录值的问题。OK,完美!

更多的话: 从 Access 生成 SQL 语句时,遇到了 Guid 查询的问题,在 SQL Server 中使用的字符串形式,不能查询出任何数据。

SELECT * FROM tableName WHERE [GUID]='12345678-90AB-CDEF-1234-567890ABCDEF'

如果条件字符串所引用的列为 GUID 类型,那么该条件表达式使用的语法稍微有所不同: WHERE [GUID] = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}} 请确保包含如上所示的嵌套大括号和连字号。 需要注意的是,嵌入大括号的方法只用于 Where 语句,在 Insert 语句中还是要使用单引号,否则将产生 MALFORMED GUID in query 的错误。

更多参考: ASP.NET开发经验(3) --- 使用 GUID 值来作为数据库行标识  http://blog.joycode.com/moslem/archive/2004/03/23/16930.aspx

其他: 导出/打印Access数据库的结构 http://blog.csdn.net/johnsuna/archive/2008/05/05/2393664.aspx

附录:

Access数据类型与.net OleDbType枚举类型的对应

最常见的数据类型映射列表

访问类型名称 数据库数据类型 OLEDB 类型 .NET 框架类型 成员名称
文本 VarWChar DBTYPE _ WSTR System.String OleDbType.VarWChar
备忘录 LongVarWCha R DBTYPE _ WSTR System.String OleDbType.LongVarWChar
字节数: UnsignedTinyInt DBTYPE _ UI 1 System.Byte OleDbType.UnsignedTinyInt
是/否 Boolean DBTYPE_BOOL System.Boolean OleDbType.Boolean
日期 / 时间 DateTime DBTYPE _ DATE System.DateTime OleDbType.date
货币 十进制 DBTYPE_NUMERIC System.Decimal OleDbType.numeric
十进制数: 十进制 DBTYPE_NUMERIC System.Decimal OleDbType.numeric
双精度数字: 双精度数字 DBTYPE_R8 System.Double OleDbType.Double
自动数字(复制 ID) GUID DBTYPE_GUID System.Guid OleDbType.guid
复制 (ID) 号: GUID DBTYPE_GUID System.Guid OleDbType.guid
自动数字(长整型) 整数 DBTYPE_I4 System.Int 32 OleDbType.integer
数量: (长整型) 整数 DBTYPE_I4 System.Int 32 OleDbType.integer
OLE 对象 LongVarBinary DBTYPE_BYTES 数组 System.Byte OleDbType.LongVarBinary
单精度数字: 单精度数字 DBTYPE_R4 System.Single OleDbType.single
整型数: SmallInt DBTYPE_I2 System.Int 16 OleDbType.SmallInt
二进制 VarBinary * DBTYPE_BYTES 数组 System.Byte OleDbType.binary
超链接 VarWChar DBTYPE _ WSTR System.String OleDbType.VarWChar

发表于 @ 2008年04月24日 11:00:00|评论(loading...)|收藏

新一篇: CSDN博客文章录入/修改的界面改进 | 旧一篇: 利用XSLT及C#.net将SVG转换为XAML

评论

#suxiaojack 发表于2008-04-27 13:04:19  IP: 220.207.195.*
不错!很方便!
#shuiying 发表于2008-04-27 18:15:43  IP: 116.52.108.*
学习,以前没想到
#xingqiliudehuanghun 发表于2008-04-29 14:26:56  IP: 219.142.59.*
好东西,以前为了生成guid可费老了劲了
#suifengnet 发表于2008-04-29 15:19:55  IP: 222.43.20.*
新建一列 设置为自动编号 递增 有(无重复) 不可以吗?
也能生产记录值啊
#johnsuna 发表于2008-04-29 18:12:34  IP: 222.248.224.*
To suifengne:
你所说的当然可以,不过,不是我们所需要的。你仔细看看背景一节就知道为什么要这么做了。
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 大可山(Johnson)