局域网连接mysql报错:
ERROR 1130: Host ‘192.168.1.36’ is not allowed to connect to this MySQL server
解决方法:
可能是帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%” 或添加一个用户为“%” 。
局域网连接mysql报错:
ERROR 1130: Host ‘192.168.1.36’ is not allowed to connect to this MySQL server
解决方法:
可能是帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%” 或添加一个用户为“%” 。
最近在研究asp.net,为了测试就想在Windows 7下部署IIS来测试和运行asp.net,开局不利,搞出一大堆错误,经多方查错,现在总算可以运行了。
首先是安装IIS支持asp.net,先是从网上找到安装选项,安装成功后我自己也截个完整的选项图上来:
使用Visual Studio自带的Dotfuscator可以对C#等.Net架构编译出来的exe进行简单的混淆(类名、函数名、变量名替换),让通过Reflector或ILSpy反编译出来的代码可读性不高,可以达到一般开发人员不容易抄袭的效果。
但在使用Dotfuscator过程中要注意一点就是,通过References引用的外部dll生成的整个namespace要排除在混淆之外(比如引用opcdaauto.dll生成的OPCAutomation namespace在排除),否则在使用delegate的地方会报错,导致程序无法正常执行。
通常在C#中我们用PropertyGrid来实验属性页功能,然后定义一个类,把对象实例传给PropertyGrid的SelectedObject属性。
然后在属性类中定义各个属性之前我们加各个Attribute调用来实现属性页上内容,如下代码:
[DisplayNameAttribute(“XXX Name”)]
[DescriptionAttribute(“XXX Description”)]
[CategoryAttribute(“YYY”)]
public string Name { get {…} set{…} }
现在需要实现多语言化,但在Attribute后的括号里不能使用Resources.XXX之类的内容来实现,因为那里需要常量。
解决办法是派生这些Attribute类,重载一些函数实现:
1. DisplayNameAttribute类我们重载public virtual string DisplayName { get; }属性
2. DescriptionAttribute类我们重载public virtual string Description { get; }属性
3. CategoryAttribute类我们重载protected virtual string GetLocalizedString(string value);方法
开发环境:C# 2008
默认语言:英语(美国) en-US
扩展语言:中文(简体) zh-CN
前提条件:要在项目稳定后,再做多语言本地化
要求:代码中一定不要使用硬编码,统一使用Resoures.XXX来使用资源中的字符串
在XP 英文版下VB或C#的默认窗体的字体都是MS Sans Serif, 8.25pt(8号字体),这个并不是TrueType字体,因此微软在Windows 7下对这些字体的支持并不好,原因可能是不适合Vista后Windows的视觉效果吧。
当把XP上面的窗体拿到Windows 7下打开时会找不到MS Sans Serif字体,默认字体改成SimSun, 9pt(9号字体),所以新编译或在XP下编译的窗体会显示成大字体,部分文字可能看不到。
解决办法是使用TrueType字Microsoft Sans Serif, 8.25pt(8号字体)代替,需要逐一修改各窗体的字体而不是使用默认字体,经测试替换后窗体不需要做任何调整就可以编译后在XP和Win7下正常显示。
之前写过一篇“C# WebBrowser类使用总结”,前段时间因密码泄漏事件淘宝登录启用了验证码功能,导致之前所写的淘宝店铺助手使用的WebClient没有用武之地,当然还可以考虑弄个验证码自动识别或弹出给用户输入的做法,但没玩过这方面的编程还是无从下手。
没办法只好改用回WebBrowser控件,实际使用中碰到3个问题:
1. URL重复提交不被处理的问题。
2. session超时后需要重新登录,但上回登录成功的cookie还生效,实际上并没有登录操作就被判断为已经登录。
3. 页面弹出窗体自动无法自动确认导致后续页面无法执行的问题。
1. 检查同一位置的应用程序是否已经运行
[csharp toolbar=”false”]
private static bool GetRunningProcessByProcessFullName(out Process runningProcess)
{
bool returnValue = false;
runningProcess = null;
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
string assemblyName = Assembly.GetExecutingAssembly().Location;
foreach (Process process in processes)
{
if (process.Id != current.Id)
{
if (process.MainModule.FileName == assemblyName)
{
runningProcess = process;
returnValue = true;
break;
}
}
}
return returnValue;
}
[/csharp]
使用正则表达式抽取整个页面的特定内容是非常方便的,但在使用时有一些细节问题还是很关键的,比如合理的使用问号(?)可以取消贪婪的抽取问题。
比如页面中包含有很多段<p>…</p>,如果我们使用下面的方法抽取:
[csharp toolbar=”false”]
Regex rx = new Regex(“<p>(.*)</p>”);
Match match = rx.Match(str); // match.NextMatch(); 可用来取下一个
[/csharp]
结果是只提出一个,内容是从第一个<p>开始到最后一个</p>结束。
这里我们只要加上问号,如下代码:
[csharp toolbar=”false”]
Regex rx = new Regex(“<p>(.*?)</p>”);
Match match = rx.Match(str);
[/csharp]
这时提到出来的就是一个个独立的<p>…</p>,有时这才是我们想要的。
另外上面正则表达式里的括号也很有用,使用match.Group[0]得到匹配的结果,用match.Group[1]即得到括号中的内容。有多个括号按从外到内、从左到右的原则依次从Group里取。
PS. C#中还有个Group的概念,挺鬼异的,这里有解释,抽空研究一下:http://blog.csdn.net/zhoufoxcn/archive/2010/03/09/5358644.aspx
Updated:更多正则表达式的揭密参见这里:http://www.regexlab.com/zh/regref.htm