通过user-Agent获取浏览器和操作系统信息

 下面是我整理的一些userAgent大家先看看格式 //Firefox 1.0.X Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7 //Firefox 1.X Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5 Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8) Gecko/20060109 Firefox/1.5 (pigfoot) Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2 Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a1) Gecko/20060115 Firefox/1.6a1 //Firefox 2.0 Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1 Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3 //苹果的Safari 2.0.X Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/419 (KHTML, like Gecko) Safari/419.3 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/417.9 (KHTML, like Gecko) Safari/417.8 在Windows XP SP2 下, IE7 将发送其 User-Agent 头为: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) 在Windows 2003 Server 下, IE7 将发送其 User-Agent 头为: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2) 在Windows Vista 下, IE7 将发送其 User-Agent 头为: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0) 我的机器的 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) Maxthon 傲游 1.x 系列的 UserAgent 值是  “Maxthon”,傲游 2.0 的 UserAgent 值是 “Maxthon 2.0″。所以只需要通过程序在 User-Agent 字符串中查找是否出现 “Maxthon” 或者 “Maxthon 2.0″ Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322) Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; Maxthon 2.0) 其他的 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20021120 Netscape/7.01 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2) 一般来讲只需要判断浏览器的内核就可以了 像遨游1.X版本腾讯的TT浏览器都是IE6的核心 如果没有特殊需要可以不加区分 下面的例子只按浏览器核心判断是那种浏览器 //获取userAgent var sUserAgent = window.navigator.userAgent; //获取红色字体的部分Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) var fAppVersion = parseFloat(window.navigator.appVersion); //比较版本大小后面的程序会用到,如果不熟悉split和push方法请参照《JavaScript学习笔记1:Array类》 function compareVersions(sVersion1, sVersion2) { var aVersion1 = sVersion1.split(“.”); var aVersion2 = sVersion2.split(“.”); if (aVersion1.length > aVersion2.length) { for (var i = 0; i < aVersion1.length – aVersion2.length; i++) { aVersion2.push(“0″); } } else if (aVersion1.length < aVersion2.length) { for (var i = 0; i < aVersion2.length – aVersion1.length; i++) { aVersion1.push(“0″); } } for (var i = 0; i < aVersion1.length; i++) { if (aVersion1[i] < aVersion2[i]) { return -1; } else if (aVersion1[i] > aVersion2[i]) { return 1; } } return 0; } //判断userAgent字符串里面是否有Opera字段,有则设isOpera为true,下面还会用到 var isOpera = sUserAgent.indexOf(“Opera”) > -1; var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false; if (isOpera) { var fOperaVersion; //Opear可以伪装成其他的浏览器,这里判断的是没有伪装的 if (window.navigator.appName == “Opera”) { fOperaVersion = fAppVersion; } //这里判断的是伪装后的(某些伪装情况下在userAgent中不会出现Opera字样对这种情况我们无能为力,不过毕竟是极少 //数),关于Opera的伪装请自己查看相关资料 else { //这个有点难度了关于正则表达式的 //我们要匹配的部分(红色字体) User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; -?) Opera 7.60 var reOperaVersion = new RegExp(“Opera (\\d+\\.\\d+)”); reOperaVersion.test(sUserAgent); //RegExp["$1"]取出第一次匹配的结果,转换成浮点型 //Opera 7.60 这个是匹配结果,转换成浮点后只剩下数字部分7.60,刚好是我们想要的结果 fOperaVersion = parseFloat(RegExp["$1"]); } //目前最新版本为9.20,请自行添加 isMinOpera4 = fOperaVersion >= 4; isMinOpera5 = fOperaVersion >= 5; isMinOpera6 = fOperaVersion >= 6; isMinOpera7 = fOperaVersion >= 7; isMinOpera7_5 = fOperaVersion >= 7.5; } var isKHTML = sUserAgent.indexOf(“KHTML”) > -1 || sUserAgent.indexOf(“Konqueror”) > -1 || sUserAgent.indexOf(“AppleWebKit”) > -1; var isMinSafari1 = isMinSafari1_2 = false; var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false; if (isKHTML) { var isSafari = sUserAgent.indexOf(“AppleWebkit”) > -1; var isKonq = sUserAgent.indexOf(“Konqueror”) > -1; //MacOS X的默认浏览器,基于KHTML,参考前面给出的userAgent if (isSafari) { var reAppleWebKit = new RegExp(“AppleWebKit\\/(\\d+(?:\\.\\s*)?)”); reAppleWebKit.test(sUserAgent); var fApplieWebKitVersion = parseFloat(RegExp["$1"]); isMinSafari1 = fApplieWebKitVersion >= 85; isMinSafari1_2 = fApplieWebKitVersion >= 124; } //判断是否是Konqueror浏览器,Unix下的浏览器,基于KHTML else if(isKonq) { var reKong = new RegExp(“Konqueror\\/(\\s+(?:\\.\\d+(?:\\.\\d)?)?)”); reKong.test(sUserAgent); isMinKonq2_2 = compareVersions(RegExp["$1"], “2.2″) >= 0; isMinKonq3 = compareVersions(RegExp["$1"], “3.0″) >= 0; isMinKonq3_1 = compareVersions(RegExp["$1"], “3.1″) >= 0; isMinKonq3_2 = compareVersions(RegExp["$1"], “3.2″) >= 0; } } //IE var isIE = sUserAgent.indexOf(“compatible”) > -1 && sUserAgent.indexOf(“MSIE”) > -1 && !isOpera; var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIe6 = false; if (isIE) { var reIE = new RegExp(“MSIE (\\d+\\.\\d+)”); reIE.test(sUserAgent); var fIEVersion = parseFloat(RegExp["$1"]); isMinIE4 = fIEVersion >= 4; isMinIE5 = fIEVersion >= 5; isMinIE5_5 = fIEVersion >= 5.5; isMinIE6 = fIEVersion >= 6.0; } //Mozilla,火狐数此类 var isMoz = sUserAgent.indexOf(“Gecko”) > -1 && !isKHTML; var isMinMoz1 = sMinMoz1_4 = isMinMoz1_5 = false; if (isMoz) { //最新的版本号是4个标志位的了,这里应该把正则表达式改成”rv:(\\d+\\.\\d+(?:\\.\\d+(?:\\.\\d+)?)?)” var reMoz = new RegExp(“rv:(\\d+\\.\\d+(?:\\.\\d+)?)); reMoz.test(sUserAgent); //调用前面比较版本的方法 isMinMoz1 = compareVersions(RegExp["$1"], “1.0″) >= 0; isMinMoz1_4 = compareVersions(RegExp["$1"], “1.4″) >= 0; isMinMoz1_5 = compareVersions(RegExp["$1"], “1.5″) >= 0; } //Netscape var isNS4 = !isIE && !isOpera && !isMoz && !isKHTML && (sUserAgent.indexOf(“Mozilla”) == 0) && (navigator.appName == “Netscape”) && (fAppVersion >= 4.0 && fAppVersion < 5.0); var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 = false; if (isNS4) { isMinNS4 = true; isMinNs4_5 = fAppVersion >= 4.5; isMinNs4_7 = fAppVersion >= 4.7; isMinNs4_8 = fAppVersion >= 4.8; } var isWin = (window.navigator.platform == “Win32″) || (window.navigator.platform == “Windows”); var isMac = (window.navigator.platform == “Mac68K”) || (window.navigator.platform == “MacPPC”) || (window.navigator.platform == “Macintosh”); var isUnix = (window.navigator.platform == “X11″) && isWin && isMac; var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = false; var isMac68K = isMacPPC = false; var isSunOS = isMinSunOS4 = isMinSunOS5 = isMinSunOS5_5 = false; if (isWin) { //Win2003为Windows NT 5.2 //那个vista是Windows NT 6.0 isWin95 = sUserAgent.indexOf(“Win95″) >= -1 || sUserAgent.indexOf(“Windows 95″) >= -1; isWin98 = sUserAgent.indexOf(“Win98″) >= -1 || sUserAgent.indexOf(“Windows 98″) >= -1; isWinME = sUserAgent.indexOf(“Win 9x 4.90″) >= -1 || sUserAgent.indexOf(“Windows ME”) >= -1; isWin2K = sUserAgent.indexOf(“Windows NT 5.0″) >= -1 || sUserAgent.indexOf(“Windows 2000″) >= -1; isWinXP = sUserAgent.indexOf(“Windows NT 5.1″) >= -1 || sUserAgent.indexOf(“Windows XP”) >= -1; isWinNT4 = sUserAgent.indexOf(“WinNT”) >= -1 || sUserAgent.indexOf(“WindowsNT”) >= -1 || sUserAgent.indexOf(“WinNT4.0″) >= -1 || sUserAgent.indexOf(“Windows NT 4.0″) && (!isWinME && !isWin2K && !isWinXP); } if (isMac) { isMac68K = sUserAgent.indexOf(“Max_68000″) > -1 || sUserAgent.indexOf(“68K”) > -1; isMacPPC = sUserAgent.indexOf(“Mac_PowerPC”) > -1 || sUserAgent.indexOf(“PPC”) > -1; } //Unix的系统太多了 这里只对SunOS做了判断 if (isUnix) { isSunOS = sUserAgent.indexOf(“SunOS”) > -1; if (isSunOS) { var reSunOS = new RegExp(“SunOS (\\d+\\.\\d+(?:\\.\\d+)?)”); reSunOS.test(sUserAgent); isMinSunOS4 = compareVersions(RegExp["$1"], “4.0″) >= 0; isMinSunOS5 = compareVersions(RegExp["$1"], “5.0″) >= 0; isMinSunOS5_5 = compareVersions(RegExp["$1"], “5.5″) >= 0; } } 注意:上面的对操作系统和浏览器判断的先后顺序是不能改变的,类似于排除法 现在好多的Ajax框架里都有这个东东可以拿来直接用, 写的有点匆忙,后面很多地方和前面用的方法相同就没有复述 如果你和我一样是新手欢迎和我交流,我的邮箱是zyyn2000【at】21cn.com,最近正在学ASP.NET Ajax相关的技术,也请高手指点 如果你想看自己的userAgent在浏览器上敲这个就可以了^_^ javascript:document.write(navigator.userAgent) 这个东西我还写了一个C#版的,方便一次性识别大量的userAgent^_^ 我的作文很少及格写的不好大家见笑了,欢迎批评指正。 国际惯例:如需转载请注明出处,谢谢. from url:http://www.cnblogs.com/Ajax-cn/archive/2007/04/24/725334.html

龙生   19 Feb 2013
View Details

js中substring和substr的用法

  substring 方法用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引 参数     描述start     必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。stop     可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。如果省略该参数,那么返回的子串会一直到字符串的结尾。 返回值 一个新的字符串,该字符串值包含 stringObject 的一个子字符串,其内容是从 start 处到 stop-1 处的所有字符,其长度为 stop 减 start。 说明 substring 方法返回的子串包括 start 处的字符,但不包括 end 处的字符。如果 start 与 end 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。如果 start 比 end 大,那么该方法在提取子串之前会先交换这两个参数。如果 start 或 end 为负数,那么它将被替换为 0。 2.substr 方法 定义和用法 substr 方法用于返回一个从指定位置开始的指定长度的子字符串。 语法 stringObject.substr(start [, length ]) 参数    描述start   必需。所需的子字符串的起始位置。字符串中的第一个字符的索引为 0。length 可选。在返回的子字符串中应包括的字符个数。 说明 如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到stringObject的最后。 举例:var str = “0123456789″; alert(str.substring(0));————”0123456789″alert(str.substring(5));————”56789″alert(str.substring(10));———–”"alert(str.substring(12));———–”"alert(str.substring(-5));———–”0123456789″alert(str.substring(-10));———-”0123456789″alert(str.substring(-12));———-”0123456789″alert(str.substring(0,5));———-”01234″alert(str.substring(0,10));———”0123456789″alert(str.substring(0,12));———”0123456789″alert(str.substring(2,0));———-”01″alert(str.substring(2,2));———-”"alert(str.substring(2,5));———-”234″alert(str.substring(2,12));———”23456789″alert(str.substring(2,-2));———”01″alert(str.substring(-1,5));———”01234″alert(str.substring(-1,-5));——–”" alert(str.substr(0));—————”0123456789″alert(str.substr(5));—————”56789″alert(str.substr(10));————–”"alert(str.substr(12));————–”"alert(str.substr(-5));————–”0123456789″alert(str.substr(-10));————-”0123456789″alert(str.substr(-12));————-”0123456789″alert(str.substr(0,5));————-”01234″alert(str.substr(0,10));————”0123456789″alert(str.substr(0,12));————”0123456789″alert(str.substr(2,0));————-”"alert(str.substr(2,2));————-”23″alert(str.substr(2,5));————-”23456″alert(str.substr(2,12));————”23456789″alert(str.substr(2,-2));————”"alert(str.substr(-1,5));————”01234″alert(str.substr(-1,-5));———–”" http://www.cnblogs.com/chinafine/archive/2009/02/26/1398771.html

龙生   19 Feb 2013
View Details

jquery $(document).ready() 与window.onload的区别

 1.执行时间window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。2.编写个数不同window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个$(document).ready()可以同时编写多个,并且都可以得到执行3.简化写法window.onload没有简化写法$(document).ready(function(){})可以简写成$(function(){});

龙生   19 Feb 2013
View Details

15 个非常有用的 jQuery 表单插件

  有很多 jQuery 的表单插件。这里收集了其中15个是最有用的插件。 ALAJAX (Ajaxify your HTML form) 该插件可轻松将你的表单变成 Ajax 方式处理,阻止了提交动作,然后通过 Ajax 方式提交。 jQuery File Upload (AJAX Upload with progress and more) Niceforms 这是一个让表单变得好看的 jQuery 插件 Fancy AJAX Contact Form meioMask (Input field mask plugin) 编辑框的输入模式限制插件 Elastic (expanding textarea) jQuery Elastic 是一个用来根据Textarea文本编辑框输入的数据自动改变输入框大小的jQuery插件。 Live Form Validation Custom Select Box (options with images) 为下拉列表增加图标显示 Pretty Checkbox 美化复选框 jQuery UI Datepicker Complexify (password strength) jQuery Form Field Validation A cool form validation with tooltips. Ketchup (form validation plugin) 带工具提示的表单验证 Valid8 Simple and cool validation plugin. jQuery qTip (tooltip plugin)  

龙生   19 Feb 2013
View Details

分享 7 款令人难忘的 jQuery 实用教程

  这次分享的一些网页特效都是完全基于jQuery的,而且相信大部分插件都可以帮助WEB前端开发者简化很多开发工作,比如菜单、图片播放等实用功能。这里我向大家展示了这些插件的在线演示,同时也提供源代码的下载,方便各位同学研究。 1、jQuery环形动画菜单 这是一款少有的jQuery菜单,很显然,环形动画是它最大的亮点,很有创意哦。 在线演示 / 源码下载 2、jQuery动画下拉菜单 这里有4个不同主题的下拉菜单,十分清爽漂亮。 在线演示 / 源码下载 3、带小图标的jQuery多级菜单导航 这是一款带有功能图标的多级菜单,用jQuery实现。 在线演示 / 源码下载 4、jQuery带缩略图的图片播放插件 这是一款基于jQuery的图片播放插件,带缩略图,而且用起来也方便。 在线演示 / 源码下载 5、古典卡带播放器 这是jQuery结合HTML5实现的古典卡带播放器,很经典。 在线演示 / 源码下载 6、jQuery实现的Lava-Lamp样式的动画菜单 基于jQuery的滑动动画菜单,仿Flash。 在线演示 / 源码下载 7、minimal tab 这是一款基于jQuery的tab菜单插件,google play风格的 在线演示 / 源码下载 以上就是7个令人难忘的jQuery实用教程,希望大家喜欢,收藏起来吧。 转自:http://www.oschina.net/news/35429/7-jquery-tutorials

龙生   19 Feb 2013
View Details

Asp.net Web Applicatoin实现自定义HttpModule拦截异常处理

  Asp.net的NamePipe机制给我们提供了很多扩展性. 使用HttpModule我们可能实现的有: 强制站点范围的Cookie策略 集中化监控与日志 编写设置与删除HTTP头 控制response输出,如删除多余空白字符 Session管理 认证与受权   下面我们来看如何实现自定义异常处理:  

  上面的代码实现了IHttpModule接口, 实现基于HttpApplication.Error事件, 接着我们自定义输出了一些信息,包括Form,QueryString. 最后把原来的Error信息清除了,这样你看到以前那个黄页了. 这个自定义的Module可以用于调试Web应用程序使用. Web.config中配置:

  实际开发中,我们可以做的事儿很多,对这些信息记日志,发邮件. 如下, 我们演示使用Enterprise Library 做异常处理并日志记录,部分代码如下:

  注意上面的代码, 为了运行代码您需要引用以下程序集 Enterprise Library Share Common LibraryMicrosoft.Practices.ServiceLocationLogging Application BlockException Handling Application BlockException Handling Logging Provider 这里我们使用Fluent API配置, 因此没有配置XML文件. 所以不需要Web.Config中配置任何信息. 代码中有注释. 为了测试我们使用一个PAGE故意Throw 一个ArgumentNullException. 通过Server.GetLastError()获取Exception, 这时由名为MyPolicy策略处理异常. 对于ArgumentNullException把它们记录日志到名为Exception分类中,这个日志文件位于d:\\logs\\ExceptionLog.log.实际开发你完全按照你的需要来自定义策略. 然后这个日志文件中写出的内容是这样的:

由于我们日志模块我们配置还需要写Rollinglog.log文件,内容如下:

 

 

转自:http://www.cnblogs.com/wintersun/archive/2011/11/12/2246513.html

龙生   19 Feb 2013
View Details

.net网站出现:不能使用 ;文件已在使用中

  今天分析iislog 发现一堆 “不能使用 ;文件已在使用中”   fuck…. 还不少呢!Google了一下,。找到了问题所在 整站,是asp+acc 的。。。所以只给了acc的数据库权限。。数据库目录是只读的、。 解决办法 数据库目录,给webuser加上写权限。。。立刻生成了个.ldb 。。。 顺便解释下,什么是ldb ldb 文件是由共享数据库的使用者自动创建以及删除得。.LDB 文件建立并存储计算机名、用户名以及放置扩展域锁的。 .LDB 文件一般与 .MDB 同名,并且与 .MDB 文件在相同目录,在 .MDB 文件被打开时建立并锁定。 举个例子,如果你打开 c:\northwind.mdb 文件后 c:\northwind.ldb 文件会自动被建立并被锁定。 当最后一个用户关闭共享数据库时 .ldb 文件会被自动删除。但是当用户没有正常关闭数据库或者数据库已经被标记为损坏,那么 .LDB 文件不会被自动删除, 因为 .LDB 文件中存储着数据库损坏时谁正在使用该数据库。 权限问题: 记得要给予 .LDB 文件所在的文件夹一定的权限。–我就没给。。虽然可以用,但是影响了性能。。 如果你准备共享一个数据库,该 .MDB 文件应该被放置在一个用户拥有读取、写入、建立、删除权限的目录中(NTSF格式)。 即使你要求每个用户有不同的文件权限(比如,只读或者可读写),所有能够共享该数据的用户对该目录都应该拥有读取、写入、建立的权限,但是你可以分配用户对某个 .MDB 文件只拥有只读权限。 注意:如果用独占方式打开某个数据库,那么 MS JET DB 将不会建立 .LDB 文件,此时用户对目录的权限只要求有读取和写入两个权限即可。 .ldb 文件的内容: MS JET DB ENGINE 会为每个以共享方式打开数据库的使用者在 .LDB 文件中创建一个条目,每个条目的大小是 64 字节。 前面 32 字节保存计算机名,后面 32 字节保存用户名。JET DB ENGINE 支持的最大用户数是 255,因此 .LDB 文件的大小不会超过 16 KB。 当一个用户关闭一个共享数据库时,该用户在 .LDB 文件中的条目不会立即被删除,可是该条目会在下一个用户打开这个数据库时被覆盖。 这也就意味着你不能通过 .LDB 文件来唯一确定谁是某个数据库的当前使用者。 .LDB 文件的使用方法: JET DB ENGINE 使用 .LDB 文件中的信息来确定谁锁定了数据,谁正在写入被其他人锁定的数据。 如果 JET DB ENGINE 发现有其他用户的锁定冲突, 它会读取 .LDB 文件以获取计算机名与用户名谁锁定了文件或者记录。 在多数锁定冲突情况下,你会在存储记录时得到一个 “写入冲突”的提示并且取消你所做的修改。 在有些情况下你会得到如下提示: Couldn”t lock table <table name>; currently in use by user <security name> on computer <computer name>. 注意:上述关于 .LDB 文件的信息与数据库文件无关。如果一个 .LDB 文件损坏,数据库文件仍然能够工作正常。 但是写入冲突的提示消息中<security name>这个部分你可能会看见一串不知所云的文字。 参考: 在 Access 2000 中,你可以用 VBA 来输出某个数据库的所有登陆用户的信息。 关于此代码请参考: 198755 ACC2000: Checking Who Logged into Database with Jet UserRoster 转自:http://rogermmg.blog.163.com/blog/static/117472889201112343341825/  

龙生   19 Feb 2013
View Details

c#连接MySql数据库的两种方法

  1、用MySQLDriverCS连接MySQL数据库 先下载和安装MySQLDriverCS,地址: http://sourceforge.net/projects/mysqldrivercs/ 在安装文件夹下面找到MySQLDriver.dll,然后将MySQLDriver.dll添加引用到项目中 注:我下载的是版本是 MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0.exe using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Odbc; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using MySQLDriverCS; namespace mysql {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }         private void Form1_Load(object sender, EventArgs e)         {             MySQLConnection conn = null;             conn = new MySQLConnection(new MySQLConnectionString(“localhost”, ”inv”, ”root”, ”831025″).AsString);             conn.Open();             MySQLCommand commn = new MySQLCommand(“set names gb2312″, conn);             commn.ExecuteNonQuery();             string sql = ”select * from exchange “;             MySQLDataAdapter mda = new MySQLDataAdapter(sql, conn);             DataSet ds = new DataSet();             mda.Fill(ds, ”table1″);             this.dataGrid1.DataSource = ds.Tables["table1"];             conn.Close();         }     } }   2、通过ODBC访问mysql数据库:   参考:http://www.microsoft.com/china/community/Column/63.mspx   1.      安装Microsoft ODBC.net:我安装的是mysql-connector-odbc-3.51.22-win32.msi 2.      安装MDAC 2.7或者更高版本:我安装的是mdac_typ.exe 2.7简体中文版 3.      安装MySQL的ODBC驱动程序:我安装的是 odbc_net.msi 4.      管理工具 -> 数据源ODBC –>配置DSN… 5.      解决方案管理中添加引用 Microsoft.Data.Odbc.dll(1.0.3300) 6.      代码中增加引用 using Microsoft.Data.Odbc;   using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq;   //vs2005好像没有这个命名空间,在c#2008下测试自动生成的 using System.Text; using System.Windows.Forms; using Microsoft.Data.Odbc; namespace mysql {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }         private void Form1_Load(object sender, EventArgs e)         {             string MyConString = ”DRIVER={MySQL ODBC 3.51 Driver};” +                                  ”SERVER=localhost;” +                                  ”DATABASE=inv;” +                                  ”UID=root;” +                                  ”PASSWORD=831025;” +                                  ”OPTION=3″;             OdbcConnection MyConnection = new OdbcConnection(MyConString);             MyConnection.Open();             Console.WriteLine(“”n success, connected successfully !”n”);             string query = ”insert into test values( ‘hello’, ‘lucas’, ‘liu’)”;             OdbcCommand cmd = new OdbcCommand(query, MyConnection);             //处理异常:插入重复记录有异常 try{   cmd.ExecuteNonQuery(); } catch(Exception ex){                  Console.WriteLine(“record duplicate.”); }finally{ […]

龙生   19 Feb 2013
View Details

C# 对文本文件的读写

计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的字符(比如汉字)以及一些特殊字符(比如€),就引入了Unicode字符集。基于Unicode字符集的编码方式有很多,比如UTF-7、UTF-8、Unicode以及UTF-32。在Windows操作系统中,一个文本文件的前几个字节是用来指定该文件的编码方式的。如果你使用NotePad或WordPad来打开一个文本文件,你并不用担心该文件的编码方式,因为这些应用程序会先读取文件的前几个字节来确定该文件的编码方式,然后用正确的编码将文本中的每个字符显示出来。下面的图中,可以看到当用NotePad记事本保存一个文档时,可以选择的编码(Encoding)方式有哪些。  用.Net读取文本文件或写入文本文件,你都不须要担心编码方式。.Net已经将这些封装好了。在读取一个文本文件的时候,如果你已经知道文本使用的是什么编码方式,你可以指定使用哪种编码方式读取文本,否则如果不指定编码方式,.Net会读取文本的前几个字节来确定使用哪种编码方式读取文件内容的。在写入文本文件的时候,你也可以指定你想使用的编码方式。如果你没有指定编码,.Net会根据写入的文本是否含有特殊字符来决定编码方式。如果没有特殊字符,就采用ASCII编码,如果有特殊字符,就采用UTF-8编码。   (一) 读取文件 如果你要读取的文件内容不是很多,可以使用 File.ReadAllText(FilePath) 或指定编码方式 File.ReadAllText(FilePath, Encoding)的方法。它们都一次将文本内容全部读完,并返回一个包含全部文本内容的字符串 string str = File.ReadAllText(@"c:\temp\ascii.txt"); // 也可以指定编码方式 string str2 = File.ReadAllText(@"c:\temp\ascii.txt", Encoding.ASCII); 也可以使用方法File.ReadAllLines。该方法返回一个字符串数组。每一行都是一个数组元素。 string[] strs = File.ReadAllLines(@"c:\temp\ascii.txt"); // 也可以指定编码方式 string[] strs2 = File.ReadAllLines(@"c:\temp\ascii.txt", Encoding.ASCII); 当文本的内容比较大时,我们就不要将文本内容一次读完,而应该采用流(Stream)的方式来读取内容。.Net为我们封装了StreamReader类。初始化StreamReader类有很多种方式。下面我罗列出几种  StreamReader sr1 = new StreamReader(@"c:\temp\utf-8.txt"); // 同样也可以指定编码方式 StreamReader sr2 = new StreamReader(@"c:\temp\utf-8.txt", Encoding.UTF8); FileStream fs = new FileStream(@"C:\temp\utf-8.txt", FileMode.Open, FileAccess.Read, FileShare.None); StreamReader sr3 = new StreamReader(fs); StreamReader sr4 = new StreamReader(fs, Encoding.UTF8); FileInfo myFile = new FileInfo(@"C:\temp\utf-8.txt"); // OpenText 创建一个UTF-8 编码的StreamReader对象 StreamReader sr5 = myFile.OpenText(); // OpenText 创建一个UTF-8 编码的StreamReader对象 StreamReader sr6 = File.OpenText(@"C:\temp\utf-8.txt");  初始化完成之后,你可以每次读一行,也可以每次读一个字符 ,还可以每次读几个字符,甚至也可以一次将所有内容读完。  // 读一行 string nextLine = sr.ReadLine(); // 读一个字符 int nextChar = sr.Read(); // 读100个字符 int nChars = 100; char[] charArray = new char[nChars]; int nCharsRead = sr.Read(charArray, 0, nChars);       // 全部读完 string restOfStream = sr.ReadToEnd();  使用完StreamReader之后,不要忘记关闭它: sr.Closee(); 假如我们需要一行一行的读,将整个文本文件读完,下面看一个完整的例子:  StreamReader sr = File.OpenText(@"C:\temp\ascii.txt"); string nextLine; while ((nextLine = sr.ReadLine()) != null) {     Console.WriteLine(nextLine); } sr.Close();    (二) 写入文件 写文件和读文件一样,如果你要写入的内容不是很多,可以使用File.WriteAllText方法来一次将内容全部写如文件。如果你要将一个字符串的内容写入文件,可以用File.WriteAllText(FilePath) 或指定编码方式 File.WriteAllText(FilePath, Encoding)方法。 string str1 = "Good Morning!"; File.WriteAllText(@"c:\temp\test\ascii.txt", str1); // 也可以指定编码方式 File.WriteAllText(@"c:\temp\test\ascii-2.txt", str1, Encoding.ASCII); 如果你有一个字符串数组,你要将每个字符串元素都写入文件中,可以用File.WriteAllLines方法: string[] strs = { "Good Morning!", "Good Afternoon!" }; File.WriteAllLines(@"c:\temp\ascii.txt", strs); File.WriteAllLines(@"c:\temp\ascii-2.txt", strs, Encoding.ASCII); 使用File.WriteAllText或File.WriteAllLines方法时,如果指定的文件路径不存在,会创建一个新文件;如果文件已经存在,则会覆盖原文件。   当要写入的内容比较多时,同样也要使用流(Stream)的方式写入。.Net封装的类是StreamWriter。初始化StreamWriter类同样有很多方式:  // 如果文件不存在,创建文件; 如果存在,覆盖文件 StreamWriter sw1 = new StreamWriter(@"c:\temp\utf-8.txt"); // 也可以指定编码方式 // true 是 append text, false 为覆盖原文件 StreamWriter sw2 = new StreamWriter(@"c:\temp\utf-8.txt", true, Encoding.UTF8); // FileMode.CreateNew: 如果文件不存在,创建文件;如果文件已经存在,抛出异常 FileStream fs = new FileStream(@"C:\temp\utf-8.txt", FileMode.CreateNew, FileAccess.Write, FileShare.Read); // UTF-8 为默认编码 StreamWriter sw3 = new StreamWriter(fs); StreamWriter sw4 = new StreamWriter(fs, Encoding.UTF8); // 如果文件不存在,创建文件; 如果存在,覆盖文件 FileInfo myFile = new FileInfo(@"C:\temp\utf-8.txt"); StreamWriter sw5 = myFile.CreateText();  初始化完成后,可以用StreamWriter对象一次写入一行,一个字符,一个字符数组,甚至一个字符数组的一部分。  // 写一个字符            sw.Write('a'); // 写一个字符数组 char[] charArray = new char[100]; // initialize these characters sw.Write(charArray); // 写一个字符数组的一部分 sw.Write(charArray, 10, 15);  同样,StreamWriter对象使用完后,不要忘记关闭。sw.Close(); 最后来看一个完整的使用StreamWriter一次写入一行的例子:  FileInfo myFile = new FileInfo(@"C:\temp\utf-8.txt"); StreamWriter sw = myFile.CreateText(); string[] strs = { "早上好", "下午好" };            foreach (var s in strs) {     sw.WriteLine(s); } sw.Close();    转自:http://www.cnblogs.com/jfzhu/archive/2012/11/16/2772576.html

龙生   19 Feb 2013
View Details

C#folderbrowserdialog和openfiledialog的使用方法

openfiledialog的使用方法 OpenFileDialog file = new OpenFileDialog(); //file.Title = “打开(Open)”;//弹出对话框的框名称 //file.Filter = “文本文件(*.txt)|*.txt”;//限制弹出对话框显示文本类型 //file.Filter = “所有文件(*.*)|*.*”;//限制弹出对话框显示文件类型 file.ShowDialog(); textBox2.Text = file.SafeFileName; ————————————— folderbrowserdialog的使用方法 FolderBrowserDialog fbd = new FolderBrowserDialog(); //fbd.SelectedPath = @”F:….”;//设置当前选择的路径 //fbd.ShowNewFolderButton = false;//是否显示新建文件夹按钮 //fbd.Description = “請選擇您將要匯出的路徑”;//描述弹出框功能 //fbd.RootFolder = Environment.SpecialFolder.Personal;//打开到个人文件夹 fbd.ShowDialog(); textBox1.Text = fbd.SelectedPath;   转自:http://blog.sina.com.cn/s/blog_7d2de80301010ak3.html  

龙生   19 Feb 2013
View Details
1 368 369 370 408