这次分享的一些网页特效都是完全基于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
View DetailsAsp.net的NamePipe机制给我们提供了很多扩展性. 使用HttpModule我们可能实现的有: 强制站点范围的Cookie策略 集中化监控与日志 编写设置与删除HTTP头 控制response输出,如删除多余空白字符 Session管理 认证与受权 下面我们来看如何实现自定义异常处理:
1 |
1: public class ErrorModule:IHttpModule |
1 |
2: { |
1 |
3: #region IHttpModule Members |
1 |
4: |
1 |
5: /// <summary> |
1 |
6: /// Disposes of the resources (other than memory) used by the module that implements <see cref="T:System.Web.IHttpModule"/>. |
1 |
7: /// </summary> |
1 |
8: public void Dispose() |
1 |
9: { |
1 |
10: //do nothing |
1 |
11: } |
1 |
12: |
1 |
13: /// <summary> |
1 |
14: /// Initializes a module and prepares it to handle requests. |
1 |
15: /// </summary> |
1 |
16: /// <param name="context">An <see cref="T:System.Web.HttpApplication"/> that provides access to the methods, properties, and events common to all application objects within an ASP.NET application</param> |
1 |
17: public void Init(HttpApplication context) |
1 |
18: { |
1 |
19: context.Error += new EventHandler(customcontext_Error); |
1 |
20: } |
1 |
21: |
1 |
22: private void customcontext_Error(object sender, EventArgs e) |
1 |
23: { |
1 |
24: HttpContext ctx = HttpContext.Current; |
1 |
25: HttpResponse response = ctx.Response; |
1 |
26: HttpRequest request = ctx.Request; |
1 |
27: |
1 |
28: Exception exception = ctx.Server.GetLastError(); |
1 |
29: |
1 |
30: var sboutput = new StringBuilder(); |
1 |
31: sboutput.Append("Querystring:<p/>"); |
1 |
32: //Get out the query string |
1 |
33: int count = request.QueryString.Count; |
1 |
34: for (int i = 0; i < count; i++) |
1 |
35: { |
1 |
36: sboutput.AppendFormat("<br/> {0}:-- {1} ", request.QueryString.Keys[i], request.QueryString[i]); |
1 |
37: } |
1 |
38: //Get out the form collection info |
1 |
39: sboutput.Append("<p>-------------------------<p/>Form:<p/>"); |
1 |
40: count = request.Form.Count; |
1 |
41: for (int i = 0; i < count; i++) |
1 |
42: { |
1 |
43: sboutput.AppendFormat("<br/> {0}:-- {1} -- <br/>", request.Form.Keys[i], request.Form[i]); |
1 |
44: } |
1 |
45: sboutput.Append("<p>-------------------------<p/>ErrorInfo:<p/>"); |
1 |
46: sboutput.AppendFormat(@"Your request could not processed. Please press the back button on your browser and try again.<br/> |
1 |
47: If the problem persists, please contact technical support<p/> |
1 |
48: Information below is for technical support:<p/> |
1 |
49: <p/>URL:{0}<p/>Stacktrace:---<br/>{1}<p/>InnerException:<br/>{2}" |
1 |
50: , ctx.Request.Url, exception.InnerException.StackTrace, exception.InnerException); |
1 |
51: |
1 |
52: response.Write(sboutput.ToString()); |
1 |
53: |
1 |
54: // To let the page finish running we clear the error |
1 |
55: ctx.Server.ClearError(); |
1 |
56: } |
1 |
57: |
1 |
58: #endregion |
1 |
59: |
1 |
60: } |
上面的代码实现了IHttpModule接口, 实现基于HttpApplication.Error事件, 接着我们自定义输出了一些信息,包括Form,QueryString. 最后把原来的Error信息清除了,这样你看到以前那个黄页了. 这个自定义的Module可以用于调试Web应用程序使用. Web.config中配置:
1 |
<httpModules> |
1 |
<add name="ErrorLoggingModule" type="MyWeb.ErrorModule"/> |
1 |
</httpModules> |
实际开发中,我们可以做的事儿很多,对这些信息记日志,发邮件. 如下, 我们演示使用Enterprise Library 做异常处理并日志记录,部分代码如下:
1 |
1: /// <summary> |
1 |
2: /// Handles the Error event of the EntLibLogging control. |
1 |
3: /// </summary> |
1 |
4: /// <param name="sender">The source of the event.</param> |
1 |
5: /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> |
1 |
6: /// <remarks>author Petter Liu http://wintersun.cnblogs.com</remarks> |
1 |
7: private void EntLibLogging_Error(object sender, EventArgs e) |
1 |
8: { |
1 |
9: var builder = new ConfigurationSourceBuilder(); |
1 |
10: |
1 |
11: builder.ConfigureInstrumentation() |
1 |
12: .ForApplicationInstance("MyApp") |
1 |
13: .EnableLogging() |
1 |
14: .EnablePerformanceCounters(); |
1 |
15: |
1 |
16: //a single exception handling policy named MyPolicy for exceptions of type ArgumentNullException. |
1 |
17: //The handler for this exception policy will log the exception to the General category (defined in the Logging Application Block configuration) |
1 |
18: //as a warning with event ID 9000, wrap the ArgumentNullException with an InvalidOperationException, set the new exception message to MyMessage, and then re-throw the exception. |
1 |
19: builder.ConfigureExceptionHandling() |
1 |
20: .GivenPolicyWithName("MyPolicy") |
1 |
21: .ForExceptionType<ArgumentNullException>() |
1 |
22: .LogToCategory("Exception") |
1 |
23: .WithSeverity(System.Diagnostics.TraceEventType.Warning) |
1 |
24: .UsingEventId(9000) |
1 |
25: .WrapWith<InvalidOperationException>() |
1 |
26: .UsingMessage("MyMessage") |
1 |
27: .ThenNotifyRethrow(); |
1 |
28: |
1 |
29: //logging application |
1 |
30: builder.ConfigureLogging() |
1 |
31: .WithOptions |
1 |
32: .DoNotRevertImpersonation() |
1 |
33: .LogToCategoryNamed("Exception") |
1 |
34: .SendTo.FlatFile("Exception Logging File") |
1 |
35: .FormatWith(new FormatterBuilder() |
1 |
36: .TextFormatterNamed("Text Formatter") |
1 |
37: . UsingTemplate("Timestamp: {timestamp}{newline}Message: {message}{newline}Category: {category}{newline}")) |
1 |
38: .ToFile("d:\\logs\\ExceptionsLog.log") |
1 |
39: .SendTo.RollingFile("Rolling Log files") |
1 |
40: .RollAfterSize(1024) |
1 |
41: .ToFile("d:\\logs\\Rollinglog.log") |
1 |
42: .LogToCategoryNamed("General") |
1 |
43: .WithOptions.SetAsDefaultCategory() |
1 |
44: .SendTo.SharedListenerNamed("Exception Logging File"); |
1 |
45: |
1 |
46: var configSource = new DictionaryConfigurationSource(); |
1 |
47: builder.UpdateConfigurationWithReplace(configSource); |
1 |
48: EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource); |
1 |
49: |
1 |
50: var ex = HttpContext.Current.Server.GetLastError(); |
1 |
51: var em = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>(); |
1 |
52: em.HandleException(ex.InnerException, "MyPolicy"); |
1 |
53: } |
注意上面的代码, 为了运行代码您需要引用以下程序集 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.实际开发你完全按照你的需要来自定义策略. 然后这个日志文件中写出的内容是这样的:
1 |
----------------------------------------Timestamp: 2011-11-12 5:57:08Message: HandlingInstanceID: a99d005d-5f8d-4613-9522-2d60efb089aaAn exception of type 'System.ArgumentNullException' occurred and was caught.----------------------------------------------------------------------------11/12/2011 13:57:08Type : System.ArgumentNullException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Message : Value cannot be null.Parameter name: Demo errorSource : MyWebHelp link : ParamName : Demo errorData : System.Collections.ListDictionaryInternalTargetSite : Void Page_Load(System.Object, System.EventArgs)Stack Trace : at MyWeb.About.Page_Load(Object sender, EventArgs e) in H:\My Project\DotNet40\TDD2010\WebHost\MyWeb\About.aspx.cs:line 14 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)Additional Info:MachineName : USERTimeStamp : 2011-11-12 5:57:08FullName : Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35AppDomainName : 3e5cb21e-3-129655510216406250ThreadIdentity : WindowsIdentity : USER\PetterCategory: Exception |
由于我们日志模块我们配置还需要写Rollinglog.log文件,内容如下:
1 |
----------------------------------------Exception Warning: 9000 : Timestamp: 2011-11-12 5:57:08Message: HandlingInstanceID: a99d005d-5f8d-4613-9522-2d60efb089aaAn exception of type 'System.ArgumentNullException' occurred and was caught.----------------------------------------------------------------------------11/12/2011 13:57:08Type : System.ArgumentNullException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Message : Value cannot be null.Parameter name: Demo errorSource : MyWebHelp link : ParamName : Demo errorData : System.Collections.ListDictionaryInternalTargetSite : Void Page_Load(System.Object, System.EventArgs)Stack Trace : at MyWeb.About.Page_Load(Object sender, EventArgs e) in H:\My Project\DotNet40\TDD2010\WebHost\MyWeb\About.aspx.cs:line 14 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)Additional Info:MachineName : USERTimeStamp : 2011-11-12 5:57:08FullName : Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35AppDomainName : 3e5cb21e-3-129655510216406250ThreadIdentity : WindowsIdentity : USER\PetterCategory: ExceptionPriority: 0EventId: 9000Severity: WarningTitle:Enterprise Library Exception HandlingMachine: USERApp Domain: 3e5cb21e-3-129655510216406250ProcessId: 2444Process Name: C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\WebDev.WebServer40.exeThread Name: Win32 ThreadId:2748Extended Properties: ---------------------------------------- |
1 |
你可以看到上面的EventId=9000与我们之前在CODE中配置是相同的. |
1 2 |
在开源社区有一个组件<a href="http://code.google.com/p/elmah/" target="_blank"><span style="color:#E3272D;">ELMAH</span></a>(Error Logging Modules and Handlers for ASP.NET),已实现Error处理发邮件,写DB,发送到SNS等功能. 我们随意来看下它的代码: 它就是基于IHttpModule的扩展,下面代码来ELMAH: |
1 |
1: /// <summary> |
1 |
2: /// Provides an abstract base class for <see cref="IHttpModule"/> that |
1 |
3: /// supports discovery from within partial trust environments. |
1 |
4: /// </summary> |
1 |
5: public abstract class HttpModuleBase : IHttpModule |
1 |
6: { |
1 |
7: void IHttpModule.Init(HttpApplication context) |
1 |
8: { |
1 |
9: if (context == null) |
1 |
10: throw new ArgumentNullException("context"); |
1 |
11: |
1 |
12: if (SupportDiscoverability) |
1 |
13: HttpModuleRegistry.RegisterInPartialTrust(context, this); |
1 |
14: |
1 |
15: OnInit(context); |
1 |
16: } |
1 |
17: |
1 |
18: void IHttpModule.Dispose() |
1 |
19: { |
1 |
20: OnDispose(); |
1 |
21: } |
1 |
22: |
1 |
23: /// <summary> |
1 |
24: /// Determines whether the module will be registered for discovery |
1 |
25: /// in partial trust environments or not. |
1 |
26: /// </summary> |
1 |
27: protected virtual bool SupportDiscoverability |
1 |
28: { |
1 |
29: get { return false; } |
1 |
30: } |
1 |
31: |
1 |
32: /// <summary> |
1 |
33: /// Initializes the module and prepares it to handle requests. |
1 |
34: /// </summary> |
1 |
35: protected virtual void OnInit(HttpApplication application) {} |
1 |
36: |
1 |
37: /// <summary> |
1 |
38: /// Disposes of the resources (other than memory) used by the module. |
1 |
39: /// </summary> |
1 |
40: protected virtual void OnDispose() {} |
1 |
41: } |
1 |
这是ErrorLogModule实现之前HttpModuleBase: |
1 |
1: public class ErrorLogModule : HttpModuleBase, IExceptionFiltering |
1 |
2: { |
1 |
3: public event ExceptionFilterEventHandler Filtering; |
1 |
4: public event ErrorLoggedEventHandler Logged; |
1 |
5: |
1 |
6: /// <summary> |
1 |
7: /// Initializes the module and prepares it to handle requests. |
1 |
8: /// </summary> |
1 |
9: |
1 |
10: protected override void OnInit(HttpApplication application) |
1 |
11: { |
1 |
12: if (application == null) |
1 |
13: throw new ArgumentNullException("application"); |
1 |
14: |
1 |
15: application.Error += new EventHandler(OnError); |
1 |
16: ErrorSignal.Get(application).Raised += new ErrorSignalEventHandler(OnErrorSignaled); |
1 |
17: } |
1 |
18: |
1 |
19: /// <summary> |
1 |
20: /// Gets the <see cref="ErrorLog"/> instance to which the module |
1 |
21: /// will log exceptions. |
1 |
22: /// </summary> |
1 |
23: protected virtual ErrorLog GetErrorLog(HttpContext context) |
1 |
24: { |
1 |
25: return ErrorLog.GetDefault(context); |
1 |
26: } |
1 |
27: |
1 |
28: /// <summary> |
1 |
29: /// The handler called when an unhandled exception bubbles up to |
1 |
30: /// the module. |
1 |
31: /// </summary> |
1 |
32: protected virtual void OnError(object sender, EventArgs args) |
1 |
33: { |
1 |
34: HttpApplication application = (HttpApplication) sender; |
1 |
35: LogException(application.Server.GetLastError(), application.Context); |
1 |
36: } |
1 |
37: |
1 |
38: /// <summary> |
1 |
39: /// The handler called when an exception is explicitly signaled. |
1 |
40: /// </summary> |
1 |
41: protected virtual void OnErrorSignaled(object sender, ErrorSignalEventArgs args) |
1 |
42: { |
1 |
43: LogException(args.Exception, args.Context); |
1 |
44: } |
1 |
45: |
1 |
46: /// <summary> |
1 |
47: /// Logs an exception and its context to the error log. |
1 |
48: /// </summary> |
1 |
49: protected virtual void LogException(Exception e, HttpContext context) |
1 |
50: { |
1 |
51: if (e == null) |
1 |
52: throw new ArgumentNullException("e"); |
1 |
53: |
1 |
54: // |
1 |
55: // Fire an event to check if listeners want to filter out |
1 |
56: // logging of the uncaught exception. |
1 |
57: // |
1 |
58: |
1 |
59: ExceptionFilterEventArgs args = new ExceptionFilterEventArgs(e, context); |
1 |
60: OnFiltering(args); |
1 |
61: |
1 |
62: if (args.Dismissed) |
1 |
63: return; |
1 |
64: |
1 |
65: // |
1 |
66: // Log away... |
1 |
67: // |
1 |
68: |
1 |
69: ErrorLogEntry entry = null; |
1 |
70: |
1 |
71: try |
1 |
72: { |
1 |
73: Error error = new Error(e, context); |
1 |
74: ErrorLog log = GetErrorLog(context); |
1 |
75: string id = log.Log(error); |
1 |
76: entry = new ErrorLogEntry(log, id, error); |
1 |
77: } |
1 |
78: catch (Exception localException) |
1 |
79: { |
1 |
80: // |
1 |
81: // IMPORTANT! We swallow any exception raised during the |
1 |
82: // logging and send them out to the trace . The idea |
1 |
83: // here is that logging of exceptions by itself should not |
1 |
84: // be critical to the overall operation of the application. |
1 |
85: // The bad thing is that we catch ANY kind of exception, |
1 |
86: // even system ones and potentially let them slip by. |
1 |
87: // |
1 |
88: |
1 |
89: Trace.WriteLine(localException); |
1 |
90: } |
1 |
91: |
1 |
92: if (entry != null) |
1 |
93: OnLogged(new ErrorLoggedEventArgs(entry)); |
1 |
94: } |
1 |
95: |
1 |
96: /// <summary> |
1 |
97: /// Raises the <see cref="Logged"/> event. |
1 |
98: /// </summary> |
1 |
99: protected virtual void OnLogged(ErrorLoggedEventArgs args) |
1 |
100: { |
1 |
101: ErrorLoggedEventHandler handler = Logged; |
1 |
102: |
1 |
103: if (handler != null) |
1 |
104: handler(this, args); |
1 |
105: } |
1 |
106: |
1 |
107: /// <summary> |
1 |
108: /// Raises the <see cref="Filtering"/> event. |
1 |
109: /// </summary> |
1 |
110: protected virtual void OnFiltering(ExceptionFilterEventArgs args) |
1 |
111: { |
1 |
112: ExceptionFilterEventHandler handler = Filtering; |
1 |
113: |
1 |
114: if (handler != null) |
1 |
115: handler(this, args); |
1 |
116: } |
1 |
117: |
1 |
118: /// <summary> |
1 |
119: /// Determines whether the module will be registered for discovery |
1 |
120: /// in partial trust environments or not. |
1 |
121: /// </summary> |
1 |
122: protected override bool SupportDiscoverability |
1 |
123: { |
1 |
124: get { return true; } |
1 |
125: } |
1 |
126: } |
1 |
更多的功能等待您去挖掘,我们在实际开发中按需选择.希望这篇POST对您开发有帮助. |
转自:http://www.cnblogs.com/wintersun/archive/2011/11/12/2246513.html
View Details今天分析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/
View Details1、用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{ […]
View Details计算机在最初只支持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
View Detailsopenfiledialog的使用方法 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
View Details看到不少网友接到了010-58652988这个电话的骚扰,说是微软的,让你们购买正版。 我网上根据这个电话搜索了一把,得到的结果是:祥得信商贸有限责任公司,显示是骗子。 其公司的经营范围:国标柴油;重油等;柴油;燃料油; 公司地址:北京北京市朝阳区北京市朝阳区建国门外..公司邮编:100002联系电话:010-58652988传真:010-58652987联系传真:010-58652987联 系 人:倪玮
View Details海尔集团首席执行官张瑞敏,在一次中层干部会上提出这样一个问题:“石头怎样才能在水上飘起来?”反馈回来的答案五花八门,有人说把石头掏空,张先生摇摇头;有人说把它放在木板上,张先生说:“没有木板”;有人说石头是假的,张先生强调“石头是真的”……终于有人站起来回答说:“速度!”张瑞敏脸上露出满意的笑容:正确!《孙子兵法》上说‘激水之疾,至于漂石者,势也’。速度决定了石头能否漂起来。” 人生也是如此,没有人为你等待,没有机会为你停留,只有与时间赛跑,才有可能会赢。早起的鸟儿有虫吃,赶在别人前头,不要停下来,这是竞争者的状态,也是胜者的状态。是的,如果成功也有捷径的话,那就是飞,时刻准备飞。 进入二十一世纪,有的人根本感觉不到:速度、变化、危机!所以当有人:学习、改变、创业时,他就看不惯! 请问:人跟马赛跑,谁跑得快?“当然马跑得快啦!”那我们人能不能骑在马上?“能!” 叫:马上成功!(或马到成功)互联网是光速!worldedo就是马—-就是我们的坐下骑!可我们的坐下骑经常有‘牛虻’在盯它的马屁股,怎么办?拍死它!继续扬鞭催马! 上仕悟到前方有路—他上路;中仕看到前方有路—才上路;下仕前方有人领路—他还不敢上路! 下面给大家讲一个网友传给我的笑话:联合国出了一道题目,请全世界的小朋友作答:“对于其他国家粮食短缺的问题,请你谈谈自己的看法。”结果,没有任何一个国家的小朋友会回答这个问题。因为,非洲小朋友看完题目后不知道什么叫做“粮食”;欧洲的小朋友看完题目后不知道什么叫做“短缺”;拉丁美洲的小朋友看完题目后不知道什么叫做“请”;美国的小朋友看完题目后,不知道什么叫做“其他国家”;亚洲小朋友看完题目后,不知道什么叫做“自己的看法”。 我看了之后,苦笑了很久。我觉得创造出这个笑话的人真有深度,这确实是一针见血的讽刺:我们确实从小不知道什么叫做“自己的看法”,多数人总要挣扎很久,糊涂很久,才发现,啊!原来我活的人生“好像不是”我要的人生。 英国浪漫主义诗人雪莱有这样一句诗:“冬天来了,春天还会远吗?”即使你处在寒冷的冬天,只要你心中有光,你就能闻到春天的气息;即使你被逆境所困,只要你心中有光,头顶的乌云总会被它所穿透;即使你被挫折和失败打翻一百次,只要你心中有光,你同样可以一百零一次站起来,把苦涩的微笑留给昨日,用不屈的毅力和信念赢得未来。 海明威说过“人可以被撕碎但不可以被打倒。”因为只要你心中有光,任何外来的不利因素都颠扑不灭你对人生的追求和对未来的向往。很多时候击败我们的不是别人而是对自己失去信心,熄灭心中那片有如火山般沉寂的光。心中有光,那是信念的基点,那是力量的源泉,那是开启人生之路的探照灯,那是打开成功之门的金钥匙! 成功必备的八种心态: 1)积极的心态:事物永远是阴阳同存,积极的心态看到的永远是事物好的一面,而消极的心态只看到不好的一面。积极的心态能把坏的事情变好,消极的心态能把好的事情变坏。当今时代是悟性的赛跑!积极的心态象太阳,照到哪里哪里亮,消极的心态象月亮,初一十五不一样,不是没有阳光,是因为你总低着头,不是没有绿洲,是因为你心中一片沙漠。成功吸引成功,民工吸引民工。华尔街致富格言:要想致富就必须远离蠢材,至少50米以外。 2)学习的心态:学习是给自己补充能量,先有输入,才能输出。成功是学习的过程。尤其在知识经济时代,知识更新的周期越来越短,过时的知识等于废料,只有不断的学习,才能不断摄取能量,才能适应社会的发展,才能生存下来。要善于思考,善于分析,善于整和,只有这样才能创新。学习是积累财富的过程,是创造财富的过程.当今学习就是创收,学习就是创业。学习是留意你身边的事。读万卷书不如行万里路;行万里路不如阅人无数;阅人无数不如名师指路. 3)付出的心态:是一种因果关系。舍就是付出,付出的心态是老板心态。是为自己做事的心态,要懂得舍得的关系。舍的本身就是得.小舍小得,大舍大得,不舍不得。而打工的心态是应付的心态。不愿付出的人,总是省钱,省力,省事,最后的把成功也省了。 4)坚持的心态:要坚持提升自己。剩者为王。我曾为美国人做翻译,她说在坐的90%以上的人不能成功,我没敢翻译,后来她继续说了一句话我才明白,因为 90%的人不能坚持。坚持的心态是在遇到坎坷的时候反映出来的心态,而不是顺利的坚持。遇到瓶颈的时候还要坚持,直到突破瓶颈达到新的高峰。要坚持出到底,不能输给自己。 5)合作的心态:合作是一种境界。合作可以打天下。强强联合。合力不只是加法之和。1+1=11再加1是111。这就是合力。但有一个1倒下了就变成了-11。足球场上最能显示合作的重要。成功不是打工,是合作,成功就是把积极的人组织在一起做事情。 6)谦虚的心态;去掉缺点,吸取优点。虚心使人进步,骄傲使人落后。有句话:谦虚是人类最大的成就。谦虚让你得到尊重。越饱满的麦穗越弯腰。 7)感恩的心态;感恩周围的一切,包括坎坷,困难和我们的敌人。事物不是孤立存在的,没有周围的一切就没有你的存在。教育网能产生巨大的效益,是多种因素造成的;中国电信提供的电信通道,游戏厅改为网吧,中央全民上网的政治环境,美国公司提供的四个平台,还有单一,高价格的信息产品在市场形成的对比。是因为这些诸多种因素才能促使教育网的成功。所以我们要感谢这一切。做的好是你们做的,做的一般是我们做的;做的不好是我做的。 8)归零的心态;重新开始。第一次成功相对比较容易,但第二次却不容易,原因是不能归零。长安集团的总裁,在东方之子接受采访的时候说了一句话,往往一个企业的失败是因为他曾经的成功。事物发展的规律是波浪前进,螺旋上升,周期性变化。用中国的古话,叫风水轮流转,经济学讲:资产重组。电视剧有句道白:生活就是不断的重新再来。不归零就不能进入新的资产重组。就不会持续性发展。 不应该有的五种心态: 1)投机的心态,后患无穷。无奸不商。现在是诚信时代,不是过路财神,是锁定消费者,锁定人才。不断的选择开头,最后损兵折将。投机的公司总是吸引投机的人,投机的人总是期望收入大于付出。 2)侥幸的心态;利用别人的心态,掩耳盗铃。不脚踏实地,总想天上掉馅饼. 3)试试看的心态;必定失败.在一所学校教书不喜欢,可再试一家学校,在一家餐馆打工不划算,可再换一家餐馆,但互联网是几百年才有的一次机遇,丢掉了,是不会再有的,改革开放25年,我们已经丢掉了三次,个体户,原始股,还有房地产。机遇的特征是,唯一性和时限性。他和普通的成熟的职业打工是本质上的区别。今年试试看,但明年连试试看的机会都没有了。事物不是一帆风顺的一定会遇到坎坷。试试看不会开发出自身的潜能。试试看的人没有大梦想。试试看的结果是:进一步退一步,原地踏踏步,等于没进步。三试,两试,机会就没有了,永远的失去了。 4)依赖的心态;最终被人当包袱甩掉。所以要相互合作,不要依赖。要把事业当做自己的事业。人当自助。 5)回本的心态;当你的回本目标完成的时候,你自然就会停下来。为什么有的贵族会自杀,其原因之一就是是因为空虚无聊,是因为目标完成了,没有奔头了,所以目标一定要定的远大。回本的心态会挡住你真正的未来和价值。
View Details进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename….filename :打开多个文件,依次进行编辑 移动光标类命令 h :光标左移一个字符 l :光标右移一个字符 space:光标右移一个字符 Backspace:光标左移一个字符 k或Ctrl+p:光标上移一行 j或Ctrl+n :光标下移一行 Enter :光标下移一行 w或W :光标右移一个字至字首 b或B :光标左移一个字至字首 e或E :光标右移一个字至字尾 ) :光标移至句尾 ( :光标移至句首 }:光标移至段落开头 {:光标移至段落结尾 nG:光标移至第n行首 n+:光标下移n行 n-:光标上移n行 n$:光标移至第n行尾 H :光标移至屏幕顶行 M :光标移至屏幕中间行 L :光标移至屏幕最后行 0:(注意是数字零)光标移至当前行首 $:光标移至当前行尾 屏幕翻滚类命令 Ctrl+u:向文件首翻半屏 Ctrl+d:向文件尾翻半屏 Ctrl+f:向文件尾翻一屏 Ctrl+b;向文件首翻一屏 nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。 插入文本类命令 i :在光标前 I :在当前行首 a:光标后 A:在当前行尾 o:在当前行之下新开一行 O:在当前行之上新开一行 r:替换当前字符 R:替换当前字符及其后的字符,直至按ESC键 s:从当前光标位置处开始,以输入的文本替代指定数目的字符 S:删除指定数目的行,并以所输入文本代替之 ncw或nCW:修改指定数目的字 nCC:修改指定数目的行 删除命令 ndw或ndW:删除光标处开始及其后的n-1个字 do:删至行首 d$:删至行尾 ndd:删除当前行及其后n-1行 x或X:删除一个字符,x删除光标后的,而X删除光标前的 Ctrl+u:删除输入方式下所输入的文本 搜索及替换命令 /pattern:从光标开始处向文件尾搜索pattern […]
View Details