mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
個人BLOG
it developer
DotNET

控制asp.net中TextBox只能输入数字

<asp:TextBox ID="textbox1" onpaste="return false" style="ime-mode:disabled" onkeypress="if ((event.keyCode<48 || event.keyCode>57) && event.keyCode!=46)  event.returnValue=false;" MaxLength="10" runat="server"> </asp:TextBox> 禁止粘帖:onpaste="return false"禁用输入法:style="ime-mode:disabled"输入小数点:event.keyCode=46 ime-mode   CSS属性 语法:ime-mode : auto | active | inactive | disabled 参数:auto : 不影响IME的状态。与不指定ime-mode属性时相同active : 指定所有使用IME输入的字符。即激活本地语言输入法。用户仍可以撤销激活IMEinactive : 指定所有不使用IME输入的字符。即激活非本地语言。用户仍可以撤销激活IMEdisabled : 完全禁用IME。对于有焦点的控件(如输入框),用户不可以激活IME 说明:设置或检索是否允许用户激活输入中文,韩文,日文等的输入法(IME)状态。对应的脚本特性为imeMode。 示例:<input style="ime-mode:disabled"> 此时限制用户可输入的内容限制为英文字母和数字

2010-03-31 0comments 103hotness 0likes mikebai Read all
杂七杂八

ppc注册表笔记

hklm/system/picture/camera/oem/ 3.动态窗口实现动画效果:修改后点击出现四方形缩放动画!打开:HKEY-LOCAL-MACHINE-SYSTEM-GWE下面的Animate=dword=0(默认为0,是取消动画),改为1实现动画效果。 去掉初次运行程序时的安全警告:HKEY_LOCAL_MACHINE-Security-Policies-Policies-0000101a= 1时不显示警告信息;=0时恢复显示。 自动释放系统资源,解决系统资源严重不足在Windows-Mobile中,每运行一个程序,系统资源就会减少。有的程序会消耗大量的系统资源,即使把程序关闭,在内存中还是有一些 没用的DLL脚本程序文件在运行,这样就使得系统的运行速度下降。不过我们可以通过修改注册表键值的方法,使关闭程序后自动清除内存中没用的DLL文件而及时收回消耗的系统 资源!打开注册表编辑器,找到:HKEY_LOCAL_MACHINE=SOFTWARE=Microsoft-Windows=CurrentVersion主键,在下面建立一项键值,命名为:“explorer”,再到“explorer”底下新建一个名为“AlwaysUnloadDll”的字符串值,然后 将“AlwaysUnloadDll”的键值写为“1”,退出注册表重启即可。 .改变屏幕最下面那两个触摸软键的功能左键:HKEY_CURRENT_USER-Software-Microsoft-Today-Keys-112-Open =WindowsCalendar.exe(功能)default=日历(显示文本信息)右键:HKEY_CURRENT_USERSoftwareMicrosoftTodayKeys113Open = Windows“开始”菜单ProgramsContacts.lnkdefault=联系人(显示文本信息) 9、修改铃声路径HKEY_CURRENT_USER-ControlPanel-SoundCategories-Ring-Directory = Storage CardMymusic不赞成改在卡上。尽量放在机子上。 17、修改注册表禁用USB端口充电---没起作用HKey_Local_Machine\Drivers\BuiltIn\usbfndrv\EnableUsbCharging=0(本来是1,改为0) 同步联机时取消边联机边充电充电:不过虽然这是微软标准的字键,但在T-MDA-II上试验无效,不知其它牌子怎样?HKEY_LOCAL_MACHINE-Drivers-BuiltIn-usbfndrv-EnableUsbCharging= 1充电;= 0不充电没有这个值的自己创建一个。断开数据线,改完注册表立即生效,不用重启机器   19、修改开始菜单和桌面快捷方式*修改开始菜单快捷方式顺序"HKEY_CURRENT_USER\SOFWARE\Microsoft\Shell\Startmenu\"修改其中的"Order",里面会看到"Inbox.lnk Contacts.link......"这些就是原先默认的强制顺序,每个*.link都代表\Storage\windows\Start Menu里面的一个快捷方式。把你想要的开始菜单的顺序按照从上到下排列,可以把你想要的快捷方式加进来,格式要和其他一样独占一行,而且要注意大小写不能错,要先看\windows\Start Menu里你需要的软 件快捷方式叫什么名字重新启动看效果*修改桌面快捷方式顺序(就是一开机桌面上那几个默认的是短信,联系人,日程,Internet和纸牌)。设定这个的注册表位置是HKEY_CURRENT_USER\SOFWARE\Microsoft\Shell\StartMRU,是修改里面的InitialOrder,方法和前面修改开始菜单一样的,这个排序是从下到上。 25、去掉WM5自带的任务栏电量显示1.用注册表编辑器打开HKEY_LOCAL_MACHINE\Software\Microsoft\Shell2.在其下建立一个名为ShowTitleBarClock的双字节值,数值为13.重新启动 34、PPC输入法一键切换实现方法!快捷啊!安装FTSwtichSIP.CAB(2)windows/start menu/programs/ 下面已经有了一个 ftSwitchSIP的程序,只要点击它一次,输入法就依次切换一次,就跟电脑上 Ctrl+Shit切换输入法一样。 (3)到系统/个人/按键 设置一个按键 到 这个 ftswitchSIP,我设置的就是 camera 照相的按键 到 ftSwitchSIP,以后每次按这个键就可以直接接换输入法了!!! 64、WM6.0系统宋体,字体太细,或不美观进行修改注册表818Pro 测试通过!但Landscrape沒有clear type function.操作:開啟 PHM 後去找 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shell 找到後會發現有一個數據 NoClearType 為 1 , 把 1改為 0改好後SoftReset ....... 到 開始 -> 設定 -> 系統 -> 螢幕 69、取消安装未认证程序时让人讨厌的提示如取消提示,"HKey_Local_Machine\Security\Policies\Policies\0000101a = 1 (DWORD decimal)"如恢复提示"HKey_Local_Machine\Security\Policies\Policies\0000101a = 0 (DWORD decimal)"   76、日历键改为别的程序的热键的办法<BR>HKEY_CURRENT_USER/software/Microsoft/Today/keys下的112,和113!<BR>  112对应左键,113对应右键                            

2010-03-30 0comments 105hotness 0likes mikebai Read all
杂七杂八

USBest(联盛)-UT165 U盘量产过程图解

整个过程如下,看图操作: 1:首先下载量产修复工具V1.65.6.0和U盘芯片识别工具ChipGenius,并安装好UT165量产修复工具。 2.:插上u盘,用ChipGenius检测u盘芯片参数,记下VID和PID的数值。(图1) c:拔下U盘,点击“开始”-->“MDPT”-->“Inf Update”,在出现的窗口中填入刚才记录下来的两个数值.(图2) d:不关窗口接着点击“开始”-->“MDPT”-->“MDPT”,运行MDPT主程序,然后插入U盘,这时系统应该会发现一个名称为“FABULK”的新硬件并自动安装驱动程序。 e:在MDPT主界面应该能显示出U盘的详细信息(图3),如果不能识别可点击:F3ENUM,或拔下U盘,关闭MDPT主程序,然后再打开主程序,插上U盘,多试几次. f:点击:F1setting,以对格式进行设置,在Vendor Data设置选项页,是对U盘的一些基本信息进行设置的,在这里,你可以设置产品的VID、PID(这两个不建议更改),还有厂商名称、产品名称,版本号、磁盘格式等等,这些根据自己的需要进行设置.(图4) g:在参数输入(Parameters Input)选项页,在关于产品序列号的部分,选择“Don't Change Serial Number”.(图5) f:在分区设置(Partition Setting)选项页,在Public Area I中,勾选Partition Option,容量Auto(这部分是量产后可以用做U盘的部分),在Autorun Area这一项中,同样勾选Partition Option,Image File这里找到你要量产到U盘的光盘镜像文件,然后很重要的一点,这里的Auto选项不要勾选,选定光盘镜像文件后,软件会自动得到镜像大小并自动分配给该分区一个合适的数值。(图6) g:设置完成后点击OK回到软件主界面,鼠标点击Space Start键或者直接键盘空格键开始。(图7) h:等进度到了100%之后,选择菜单中的Driver-->Uninstall Driver,然后关闭MDPT软件,拔下U盘并重新插拔,就能在“我的电脑”里看见量产后的USB-CDROM了。(图8,9) 本教程来自数码之家 mdsk首发, abc440881朋友整理. http://bbs.mydigit.cn/read.php?fid=84&tid=46136 http://bbs.mydigit.cn/read.php?fid=84&tid=55186

2010-03-28 0comments 139hotness 0likes mikebai Read all
杂七杂八

LCID区域码

区域设置 ID (LCID) 表 区域设置描述 简写 十六进制值 十进制值 区域设置描述 简写 十六进制值 十进制值 南非荷兰语 af 0x0436 1078 印地语 hi 0x0439 1081 阿尔巴尼亚语 sq 0x041C 1052 匈牙利语 hu 0x040E 1038 阿拉伯语 - 阿拉伯联合酋长国 ar-ae 0x3801 14337 冰岛语 is 0x040F 1039 阿拉伯语 - 巴林 ar-bh 0x3C01 15361 印度尼西亚语 in 0x0421 1057 阿拉伯语 - 阿尔及利亚 ar-dz 0x1401 5121 意大利语 - 标准 it 0x0410 1040 阿拉伯语 - 埃及 ar-eg 0x0C01 3073 意大利语 - 瑞士 it-ch 0x0810 2064 阿拉伯语 - 伊拉克 ar-iq 0x0801 2049 日语 ja 0x0411 1041 阿拉伯语 - 约旦 ar-jo 0x2C01 11265 朝鲜语 ko 0x0412 1042 阿拉伯语 - 科威特 ar-kw 0x3401 13313 拉脱维亚语 lv 0x0426 1062 阿拉伯语 - 黎巴嫩 ar-lb 0x3001 12289 立陶宛语 lt 0x0427 1063 阿拉伯语 - 利比亚 ar-ly 0x1001 4097 马其顿语 mk 0x042F 1071 阿拉伯语 - 摩洛哥 ar-ma 0x1801 6145 马来语 - 马来西亚 ms 0x043E 1086 阿拉伯语 - 阿曼 ar-om 0x2001 8193 马耳他语 mt 0x043A 1082 阿拉伯语 - 卡塔尔 ar-qa 0x4001 16385 挪威语 - 博克马尔 no 0x0414 1044 阿拉伯语 - 沙特阿拉伯 ar-sa 0x0401 1025 波兰语

2010-03-26 0comments 120hotness 0likes mikebai Read all
dev

使用Visual Studio 2008 开发php

过年了,想趁的这段长假期间,抽空研究一下wordpress源码。以前编辑php代码,都是用editplus,editplus小巧,支持php高亮语法,编写小的php程序还是很不错,不过研究源码最需要是可以调试、跟踪源码,这点显然editplus就做不到了。在开发工具中,我用的最多的就是Visual Studio的,有没有办法可以用Visual Studio 来编译调试php呢?google了一下,嗯,发现了一个工具:vs.php,下载试用一下,感觉不错。vs.php 是Visual Studio的插件 分三个版本:VS.Php for Visual Studio 2008 、VS.Php for Visual Studio 2005和VS.Php Standalone Edition,前面两个版本安装Visual Studio 2008或 Visual Studio 2005的用户,最后一个版本适合没有安装Visual Studio的用户或安装了Visual Studio 2005以下版本的用户。在编写、调试php方面非常适合经常使用Visual Studio的程序员,很平滑的过渡到php开发。为什么这么说呢?1、强大php编辑器:支持php语法高亮是最基本的。自动创建文档注释php语法智能提示数组智能提示代码折叠、大纲查看代码块2、灵活编译、调试功能。支持php调试支持javascript调试支持dbg和xdebug两种调试引擎支持php4和php5两种运行环境3、程序结构基于项目和开发有关net的项目非常类似,基于项目的形式组织程序vs.php 调试php程序,会启动Apache web服务器,同时会把运行的IE进程临时添加到项目里来进行调试运行。 整个调试的过程,对net程序员来说,没有什么难度。对于已经开发好的php,可以按本来的目录形式组织成项目文件,以wordpress代码为例,在vs2008里步骤如下:1、菜单:文件+php project from existing code2、选择路径wordpress程序3、选择项目类型和运行环境4、选择项目包含的目录。添加完成后,如下图所示:不错吧,有兴趣下载来试试。试用版只有30天试用期,正式版要99.99美刀呢。下载的地址:http://www.jcxsoftware.com/download.php

2010-03-19 0comments 123hotness 0likes mikebai Read all
DotNET

Calling ASP.Net validators from JavaScript

There are situations when we want to call Asp.net validatiors form JavaScript. One such situation is when we want to close a pop up window on button click using window.close(). But before closing the window using JavaScript, we want to validate the data written in the controls of the window. It possible to call Asp.net validators from JavaScript. The following code shows a portion of asp.net page which includes one standard .net required field validator and one regular expression validator. <table> <tr> <td><asp:Label ID=”lbl1″ runat=”server” Text=”Please enter a digit”></asp:Label></td> <td><asp:TextBox ID=”txtbox1″ runat=”server”></asp:TextBox></td> <td><asp:RequiredFieldValidator ID=”valReq” ControlToValidate=”txtbox1″ runat=”server” ErrorMessage=”*” Display=”Dynamic”></asp:RequiredFieldValidator><asp:RegularExpressionValidator ID=”valreg” ControlToValidate=”txtbox1″ runat=”server” ErrorMessage=”Not valid character” ValidationExpression=”[0-9]“></asp:RegularExpressionValidator></td> </tr> <tr> <td></td><td><asp:Button ID=”btn1″ runat=”server” Text=”Submit” OnClientClick=”performCheck()”/></td> <td></td> </tr> </table> In design mode, it looks as below View in design mode Now we want to make sure that .net validators get fired up on “Submit” button click before closing the window using javascript window.close(). In our example, we have a text box where we expect a single digit before closing the window. All we have to do to fire up .net validators is to call “Page_ClientValidate()” function.  The following JavaScript code shows how “Page_ClientValidate()” function can be used before closeing window. <script type=”text/javascript” language=”javascript”> function performCheck(){ if(Page_ClientValidate()){ window.close(); } }</script> Now, if the Submit button is clicked leaving the text box empty, the required field validator will fire up as shown in the below screen shot. Required field validotor fires up If any thing is written in other than a single digit, we will get the following output. Regular Expression Validator fires up

2010-03-12 0comments 106hotness 0likes mikebai Read all
DotNET

验证控件笔记

1)from:http://dev.csdn.net/article/56/56880.shtm  在asp.net 1.1中,对于验证类控件,在使用时,遇到有的不需要验证的控件时,是十分麻烦的,就是说不可能有选择验证某些控件,而在asp.net 2.0中,新增加了validationgroup属性,可以指定验证某些控件,例子如下: <html> <body>      <form runat=“server”>           <asp:textbox id=“TextBox1” runat=“server”/>           <asp:requiredfieldvalidator ValidationGroup=“Group1”                                                        ErrorText=“Need to Fill in Value!”                                                        ControlToValidate=“TextBox1”                                                        runat=“server”/>               <asp:textbox id=“TextBox2” runat=“server”/>             <asp:requiredfieldvalidator ValidationGroup=“Group2”                                                          ErrorText=“Need to Fill in Value!”                                                

2010-03-11 0comments 98hotness 0likes mikebai Read all
DotNET

asp.net2.0 with c#2.0 学习笔记之validation控件

概述 validation 控件主要是为了验证用户输入内容的。而用户容易犯的错误是: 1、忽略重要的内容,让文本框空着 2、为了应付,瞎填,乱填就想提交 3、用户想认真填写,但是填写的内容不符合格式要求。 4、别用用心之人,会尝试输入一些不安全的代码。 .net2.0提供了5种validation 控件来解决以上问题: 1、RequiredFieldValidator           验证输入内容是否为空。 2、RangeValidator                        验证输入内容是否为特定范围内的的数值,字母或日期 3、CompareValidator                   验证当期输入框内的内容是否和另外一个输入控件内容相匹配 4、RegularExpressionValidator   验证输入内容是否满足特定的正则表达式规则 5、CustomValidator                     调用编程者自己定义的验证程序 任何一个控件都可以绑定到一个输入控件上,一个输入控件可以同时跟几个验证控件绑定。 需要注意的是:当你在使用控件RangeValidator,CompareValidator或RegularExpressionValidator的时候,验证过程都会将输入内容为空看做是正确的,并通过验证。如果你不想这样,只能加一个RequiredFieldValidator控件,保证输入内容不是空的。 和其他web控件一样,你添加一个验证控件到表单中的时候也用 <asp:ControlClassName /> 顺便提一下,还有个验证控件:ValidationSummary   它不是真正去验证什么,而是通过它可以提供一个列表来列出整个页面的所有验证错误信息。 工作过程 当用户填好表单后就单击按钮进行提交。而每个按钮都有个属性:CauseValidation ,它的值可以是true或false. 当按钮的CauseValidation属性的值是false的时候,用户单击按钮后不会进行任何验证,数据直接提交到服务器。 当然了,当CauseValidation的属性值为true的时候(默认值),用户单击这个按钮asp.net会自动地去验证这个页面的所有验证控件。当任何一个验证控件验证的结果出现没有通过验证的状况时,asp.net会阻止提交后的处理程序,并显示出错误信息。 客户端的验证 在许多最新的浏览器中(包括IE5.0及以后的版本,Firefox),asp.net会自动在客户端页面中插入javascript代码去验证,在进行数据提交之前就会进行验证,并提示错误信息。 不过,即使在客户端验证都通过的情况下,在服务端仍然进行验证过程。这是为了提防某些人将客户端页面进行修改,删除验证javascript代码后进行提交。 Validator 类 validation 控件属于 System.Web.UI.WebControls 命名空间(namespace)继承于 BaseValidator 类。 BaseValidator 的属性如下: ControlToValidate       指定该控件所要验证的输入控件id ErroMessage               验证没有通过的时候,显示的错误信息 ForeColor                    错误信息的显示颜色 Display                        错误信息的显示方式,其值有三个:Dynamic 或 Static,None 中文意思为动态和静态, 所谓动态就是隐藏的错误信息并不占位,当发生验证失败的时候会出现错误信息。而静态的,就是错误信息在没有显示的时候也占位,只是显示与不显示进行转换而已。两者的区别就是错误信息在显示前占位与否。None,表示无论是否通过了验证与否,都不显示错误信息。 IsValid     只读,其值为true或false反映该控件是否成功通过验证。 Enabled 当值为false的时候,该验证控件不起作用,默认为true. EnableClientSideScript   当设置为true,asp.net会自动在客户端插入相应的javascript和DHTML代码进行客户端的验证,前提是客户端浏览器要支持。 当使用一个验证控件的时候,你只需要对ControlToValidate 和ErroMessage属性进行相关设置即可。当然对五种不同的验证控件,你需要注意它们需要一些不同额外的设置: RequiredFieldValidator      不需要 RangeValidator                  MaximumValue,MinimumValue,Type CompareValidator              ControlToCompare,Operator,Type,ValueToCompare RegularExpressionValidator   ValidationExpression CustomValidator                 ClientValidationFunction,ServerValidateEvent 由于各验证控件会产生错误信息,错误信息需要占位,当我们在排版的时候没有那么多的地方 放错误信息的时候,我们又需要怎么做呢? 幸好有个控件ValidationSummary可以解决这个问题: 将<asp:ValidationSummary id="Errors" runat="server" /> 放在适当的位置,当验证的时候,它将所有的错误信息依次做列表显示。 ValidationSummary也拥有很多属性: HeaderText          可以理解为标题文本,比如设置为“本次产生如下错误:” ForeColor             文本的颜色 DisplayMode     &n

2010-03-11 0comments 99hotness 0likes mikebai Read all
dev

小议SQL Server主键和自动编号问题[转载]

  所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。  当然,其它字段可以辅助我们在执行这些操作时消除共享冲突,不过就不在这里讨论了。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。所以数据库在设计时,主键起到了很重要的作用。  常见的数据库主键选取方式有:  ◆自动增长字段  ◆手动增长字段  ◆UniqueIdentifier  ◆“COMB(Combine)”类型  一、自动增长型字段  很多数据库设计者喜欢使用自动增长型字段,因为它使用简单。自动增长型字段允许我们在向数据库添加数据时,不考虑主键的取值,记录插入后,数据库系统会自动为其分配一个值,确保绝对不会出现重复。如果使用SQL Server数据库的话,我们还可以在记录插入后使用@@IDENTITY全局变量获取系统分配的主键键值。  尽管自动增长型字段会省掉我们很多繁琐的工作,但使用它也存在潜在的问题,那就是在数据缓冲模式下,很难预先填写主键与外键的值。假设有两张表:  Order(OrderID, OrderDate)  OrderDetial(OrderID, LineNum, ProductID, Price)  Order 表中的OrderID是自动增长型的字段。现在需要我们录入一张订单,包括在Order表中插入一条记录以及在OrderDetail表中插入若干条记录。因为Order表中的OrderID是自动增长型的字段,那么我们在记录正式插入到数据库之前无法事先得知它的取值,只有在更新后才能知道数据库为它分配的是什么值。这会造成以下矛盾发生:  首先,为了能在 OrderDetail的OrderID字段中添入正确的值,必须先更新Order表以获取到系统为其分配的OrderID值,然后再用这个 OrderID填充OrderDetail表。最后更新OderDetail表。但是,为了确保数据的一致性,Order与OrderDetail在更新时必须在事务保护下同时进行,即确保两表同时更行成功。  听棠.NET指出:主档放在事务中提交时,通过@@IDENTITY 就可以取到生成值的,因此可以传给明细当外键用,而且在事务发生错误回滚时,主档记录也会被回滚取消的。  吕震宇补充:使用自动增长字段会增加网络的roundTrip。尽管可以使用@@IDENTITY取得主键的值,但在更新过程中,不得不增加一次数据往返(以C/S结构为例):  1、客户端发送开始事务命令  2、客户端提交主表更新  3、服务器返回@@IDENTITY  4、客户端根据返回的主键更新从表缓冲  5、客户端将从表提交服务器更新  6、客户端提交事务  在这里多了一次往返就会增加了事务处理的时间。降低并发性能。  如果不用自动增长型字段,将是以下情景:  1、客户端发送开始事务命令  2、客户端提交主表更新  3、客户端提交从表更新  4、客户端提交事务  因此我不赞成使用自动增长型字段作为主键与外键链接的纽带。  除此之外,当我们需要在多个数据库间进行数据的复制时(SQL Server的数据分发、订阅机制允许我们进行库间的数据复制操作),自动增长型字段可能造成数据合并时的主键冲突。设想一个数据库中的Order表向另一个库中的Order表复制数据库时,OrderID到底该不该自动增长呢?  ADO.NET允许我们在 DataSet中将某一个字段设置为自动增长型字段,但千万记住,这个自动增长字段仅仅是个占位符而已,当数据库进行更新时,数据库生成的值会自动取代 ADO.NET分配的值。所以为了防止用户产生误解,建议大家将ADO.NET中的自动增长初始值以及增量都设置成-1。此外,在ADO.NET中,我们可以为两张表建立DataRelation,这样存在级联关系的两张表更新时,一张表更新后另外一张表对应键的值也会自动发生变化,这会大大减少了我们对存在级联关系的两表间更新时自动增长型字段带来的麻烦。  二、手动增长型字段  既然自动增长型字段会带来如此的麻烦,我们不妨考虑使用手动增长型的字段,也就是说主键的值需要自己维护,通常情况下需要建立一张单独的表存储当前主键键值。还用上面的例子来说,这次我们新建一张表叫IntKey,包含两个字段,KeyName以及KeyValue。就像一个HashTable,给一个 KeyName,就可以知道目前的KeyValue是什么,然后手工实现键值数据递增。在SQL Server中可以编写这样一个存储过程,让取键值的过程自动进行。代码如下:CREATE PROCEDURE [GetKey]  @KeyName char(10), @KeyValue int OUTPUT AS UPDATE IntKey SET @KeyValue = KeyValue = KeyValue + 1 WHERE KeyName = @KeyName GO  这样,通过调用存储过程,我们可以获得最新键值,确保不会出现重复。若将OrderID字段设置为手动增长型字段,我们的程序可以由以下几步来实现:首先调用存储过程,获得一个OrderID,然后使用这个OrderID填充Order表与OrderDetail表,最后在事务保护下对两表进行更新。  使用手动增长型字段作为主键在进行数据库间数据复制时,可以确保数据合并过程中不会出现键值冲突,只要我们为不同的数据库分配不同的主键取值段就行了。但是,使用手动增长型字段会增加网络的RoundTrip,我们必须通过增加一次数据库访问来获取当前主键键值,这会增加网络和数据库的负载,当处于一个低速或断开的网络环境中时,这种做法会有很大的弊端。同时,手工维护主键还要考虑并发冲突等种种因素,这更会增加系统的复杂程度。  三、使用UniqueIdentifier  SQL Server为我们提供了UniqueIdentifier数据类型,并提供了一个生成函数NEWID( ),使用NEWID( )可以生成一个唯一的UniqueIdentifier。UniqueIdentifier在数据库中占用16个字节,出现重复的概率非常小,以至于可以认为是0。我们经常从注册表中看到类似{45F0EB02-0727-4F2E-AAB5-E8AEDEE0CEC5}的东西实际上就是一个UniqueIdentifier,Windows用它来做COM组件以及接口的标识,防止出现重复。在.NET里管UniqueIdentifier称之为GUID(Global Unique Identifier)。在C#中可以使用如下命令生成一个GUID:Guid u = System.Guid.NewGuid();   对于上面提到的Order与OrderDetail的程序,如果选用UniqueIdentifier作为主键的话,我们完全可以避免上面提到的增加网络 RoundTrip的问题。通过程序直接生成GUID填充主键,不用考虑是否会出现重复。  UniqueIdentifier 字段也存在严重的缺陷:首先,它的长度是16字节,是整数的4倍长,会占用大量存储空间。更为严重的是,UniqueIdentifier的生成毫无规律可言,要想在上面建立索引(绝大多数数据库在主键上都有索引)是一个非常耗时的操作。有人做过实验,插入同样的数据量,使用 UniqueIdentifier型数据做主键要比使用Integer型数据慢,所以,出于效率考虑,尽可能避免使用UniqueIdentifier型数据库作为主键键值。  四、使用“COMB(Combine)”类型  既然上面三种主键类型选取策略都存在各自的缺点,那么到底有没有好的办法加以解决呢?答案是肯定的。通过使用COMB类型(数据库中没有COMB类型,它是Jimmy Nilsson在他的“The Cost of GUIDs as Primary Keys”一文中设计出来的),可以在三者之间找到一个很好的平衡点。  COMB 数据类型的基本设计思路是这样的:既然UniqueIdentifier数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么我们能不能通过组合的方式,保留UniqueIdentifier的前10个字节,用后6个字节表示GUID生成的时间(DateTime),这样我们将时间信息与 UniqueIdentifier组合起来,在保留UniqueIdentifier的唯一性的同时增加了有序性,以此来提高索引效率。也许有人会担心 UniqueIdentifier减少到10字节会造成数据出现重复,其实不用担心,后6字节的时间精度可以达到1/300秒,两个COMB类型数据完全相同的可能性是在这1/300秒内生成的两个GUID前10个字节完全相同,这几乎是不可能的!在SQL Server中用SQL命令将这一思路实现出来便是:DECLARE @aGuid UNIQUEIDENTIFIER  SET @aGui

2010-03-11 0comments 120hotness 0likes mikebai Read all
DotNET

vs历史记录清除

2008-09-10 10:481:建立一个txt文件,复制下面的代码,另存为.bat后缀,双击 再次打开VS 即可清除,内置代码如下:(推荐) @echo off@REG Delete HKCU\Software\Microsoft\VisualStudio\8.0\FileMRUList /va /f@REG Delete HKCU\Software\Microsoft\VisualStudio\8.0\ProjectMRUList /va /f 2:手动在注册表中将其清除运行 run 注册表 regedit 1)删除最近打开的文件HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\FileMRUList ,在右边删除相应键值。2)删除最近打开的项目HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\ProjectMRUList,在右边删除相应键值。

2010-03-11 0comments 100hotness 0likes mikebai Read all
1…4142434445…62

Recent Posts

  • c# winform适配高dpi
  • com.microsoft.sqlserver.jdbc.SQLServerException “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server建立安全连接
  • java -cp 用法介绍
  • HTML 容器元素
  • MVC的cshtml的介绍

Recent Comments

No comments to show.

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang