MySQL一窍不通啊,今天工作上需要用到,请教了别人,做以备忘
DROP PROCEDURE test_insert ;
DELIMITER ;;
CREATE PROCEDURE test_insert ()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i<10
DO
INSERT INTO CMS.CMS_Module
(
ModuleType,
ModuleName,
ModuleDescription,
DesignHTML,
QUERY
)
VALUES
(
'2',
CONCAT('活动',i),
'测试加入',
'aaaaaaaaaa',
''
);
SET i=i+1;
END WHILE ;
END;;
CALL test_insert();
posted @ 2010-10-11 14:31 双击 阅读(414) 评论(0)
编辑
Set ExcelApp = CreateObject("Excel.Application")
Set ExcelSheet = createobject("Excel.Sheet")
ExcelSheet.ActiveSheet.Cells(1,1).Value = "My Vbscript"
ExcelSheet.SaveAs("C:\111.XLS")
ExcelSheet.Application.Quit()
将这些代码复制到记事本中,然后另存为所有文件,文件名叫1.vbs
然后双击一下,在c盘就会出现一个xls文件,
将其中的代码改成你的代码即可,完全支持EXCEL中的VBA,无论安全性高与中,都可运行,还可以利用FSO,WSCRIPT等模型操纵硬盘文件,注册表,哇靠,世界太美好了~~
posted @ 2010-10-11 14:31 双击 阅读(84) 评论(0)
编辑
将DLL合并到exe中
需要用到 ILmerge.exe(600K) 软件
微软出品
下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=en
注意:语法要将exe文件放在前面
C:\Program Files (x86)\Microsoft\ILMerge>ILMerge.exe /ndebug /target:winexe /out
:e:\1\1.exe e:\1\TestDemo.ApplyQQ.exe /log e:\1\XydSoft.FrameWork.dll
posted @ 2010-10-11 14:31 双击 阅读(75) 评论(0)
编辑
Emit就是快啊,我有做测试
30000条数据,直接发射的话7秒多,Emit1.2秒左右
先记下来,有空了研究
public static class NewClas
{
public static List<T> ToList<T>(DataTable dt)
{
List<T> list = new List<T>();
if (dt == null) return list;
DataTableEntityBuilder<T> eblist = DataTableEntityBuilder<T>.CreateBuilder(dt.Rows[0]);
foreach (DataRow info in dt.Rows)
list.Add(eblist.Build(info));
dt.Dispose();
dt = null;
return list;
}
public class DataTableEntityBuilder<T>
{
private static readonly MethodInfo getValueMethod = typeof(DataRow).GetMethod("get_Item", new Type[] { typeof(int) });
private static readonly MethodInfo isDBNullMethod = typeof(DataRow).GetMethod("IsNull", new Type[] { typeof(int) });
private delegate T Load(DataRow dataRecord);
private Load handler;
private DataTableEntityBuilder() { }
public T Build(DataRow dataRecord)
{
return handler(dataRecord);
}
public static DataTableEntityBuilder<T> CreateBuilder(DataRow dataRow)
{
DataTableEntityBuilder<T> dynamicBuilder = new DataTableEntityBuilder<T>();
DynamicMethod method = new DynamicMethod("DynamicCreateEntity", typeof(T), new Type[] { typeof(DataRow) }, typeof(T), true);
ILGenerator generator = method.GetILGenerator();
LocalBuilder result = generator.DeclareLocal(typeof(T));
generator.Emit(OpCodes.Newobj, typeof(T).GetConstructor(Type.EmptyTypes));
generator.Emit(OpCodes.Stloc, result);
for (int index = 0; index < dataRow.ItemArray.Length; index++)
{
PropertyInfo propertyInfo = typeof(T).GetProperty(dataRow.Table.Columns[index].ColumnName);
Label endIfLabel = generator.DefineLabel();
if (propertyInfo != null && propertyInfo.GetSetMethod() != null)
{
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, index);
generator.Emit(OpCodes.Callvirt, isDBNullMethod);
generator.Emit(OpCodes.Brtrue, endIfLabel);
generator.Emit(OpCodes.Ldloc, result);
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, index);
generator.Emit(OpCodes.Callvirt, getValueMethod);
generator.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType);
generator.Emit(OpCodes.Callvirt, propertyInfo.GetSetMethod());
generator.MarkLabel(endIfLabel);
}
}
generator.Emit(OpCodes.Ldloc, result);
generator.Emit(OpCodes.Ret);
dynamicBuilder.handler = (Load)method.CreateDelegate(typeof(Load));
return dynamicBuilder;
}
}
}
posted @ 2010-10-11 14:31 双击 阅读(142) 评论(0)
编辑
一直对正则匹配替换稀里糊涂的,这次做了一个测试,把问题搞明白
记录一下
string regexString = "(匹配)";
string regexContent = "做一个测试,匹配三次,匹配的是'匹配'两个字本身'";
public void Main()
{
Regex regex = new Regex(regexString, RegexOptions.Singleline);
Match match = regex.Match(regexContent);
//做替换,"$1"表示的是被匹配的内容
string result = regex.Replace(regexContent, "[$1]");
System.Console.WriteLine(result);
result = regex.Replace(regexContent, "**");
System.Console.WriteLine(result);
}
结果:
做一个测试,[匹配]三次,[匹配]的是'[匹配]'两个字本身'
做一个测试,**三次,**的是'**'两个字本身'
posted @ 2010-10-11 14:31 双击 阅读(57) 评论(0)
编辑
(function () {
var resolution = "分辨率:" + window.screen.width + "*" + window.screen.height;
alert(resolution);
})();
(function () {
var ua = window.navigator.userAgent;
var osVersion = ua.split(";")[2];
var osV = osVersion.substr(osVersion.length - 3, 3);
var opName = "";
switch (osV) {
case "5.0":
opName = "Win2000";
break;
case "5.1":
opName = "WinXP";
break;
case "5.2":
opName = "Win2003";
break;
case "6.1":
opName = "Win 7";
break;
default:
opName = "Other";
break;
}
alert("操作系统:" + opName);
})();
(function () {
var Sys = {};
var ua = navigator.userAgent.toLowerCase();
var s;
(s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
(s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
(s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
(s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
(s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
if (Sys.ie)
result = { Type: "ie", Ver: Sys.ie };
else if (Sys.firefox)
result = { Type: "firefox", Ver: Sys.firefox };
else if (Sys.chrome)
result = { Type: "chrome", Ver: Sys.chrome };
else if (Sys.opera)
result = { Type: "opera", Ver: Sys.opera };
else if (Sys.safari)
result = { Type: "safari", Ver: Sys.safari };
else
result = { Type: "unknown", Ver: "unknown" };
//var result = {"Type":navigator.appName,"Ver":navigator.appVersion};
alert("浏览器:" + result.Type + ",版本:" + result.Ver);
})();
(function () {
var c;
var cv = 16;
if (cv != "Netscape")
c = screen.colorDepth;
else
c = screen.pixelDepth;
var cs = c;
if (c == 4)
cs = "4 位 16 色";
if (c == 8)
cs = "8 位 256 色";
if (c == 16)
cs = "16 位增强色";
if (c > 16)
cs = cs + " 位真彩色";
alert(cs);
})();
posted @ 2010-10-11 14:31 双击 阅读(113) 评论(0)
编辑
| |
|
| 一下为摘录的一部分,yield return对比前一篇 1。代码很简洁。其实这里多了一个yield return 语句,由于yield return 并不对应多余的il指令。所以编译器就会在编译的时候,生成一个实现Ienumator接口的类.并且自动维护该类的状态.比如movenext, 2. 使用yield return 很容易实现递归调用中的迭代器. 如果以上的问题,不使用yield return的话,可想而知.要么你先把所有的结果暂时放到一个对象集合中. 可是这样就以为着在迭代之前一定要计算号. 要么可能你的movenext 就相当的复杂了. .NET 编译生成的代码其实利用了state machine. 代码量也很大. 类似迭代的调用,比如二叉树遍历 用yield return 就很方便了.另外还有常说的pipeline模式也很方便了. 可是yield return 还是有一些缺陷. 比如如果GetFiles 有一个参数是ref 或者 out, 那这个state machine就很难去维护状态了. 事实上,yield return那是不支持方法带有ref或者out参数的情况. | |
posted @ 2010-10-11 14:31 双击 阅读(286) 评论(0)
编辑
其实本质上就是把远程的图片Stream流下载到本地,用pictureBox展示出来而已
带上cookie,这样就可以肉眼识别
代码很简单,直接上了
前台也就是一个pictureBox控件
AutoLoginHelper autoLoginHelper=new AutoLoginHelper(Encoding.UTF8);
CookieContainer cc=new CookieContainer();
Stream stream=autoLoginHelper.GetImages("http://passport.csdn.net/ShowExPwd.aspx%22,string.Empty,Encoding.UTF8,ref cc);
Image img = new Bitmap(stream);
this.pictureBox1.Image = img;
public Stream GetImages(string url, string postData, Encoding encoding, ref CookieContainer cookieContainer)
{
byte[] postByte = encoding.GetBytes(postData);
HttpWebRequest wr = System.Net.HttpWebRequest.Create(url) as HttpWebRequest;
wr.CookieContainer = cookieContainer;
wr.Method = "POST";
wr.ContentType = "application/x-www-form-urlencoded";
wr.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; MS-RTC LM 8; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
wr.Referer = url;
wr.CookieContainer = cookieContainer;
wr.ContentLength = postByte.Length;
Stream sr = wr.GetRequestStream();
sr.Write(postByte, 0, postByte.Length);
sr.Close();
HttpWebResponse response = wr.GetResponse() as HttpWebResponse;
System.IO.Stream responseStream = response.GetResponseStream();
return responseStream;
}
posted @ 2010-10-11 14:31 双击 阅读(64) 评论(0)
编辑
| 在现实应用中,对于集合以及枚举这些集合的需求非常普遍, 因此在.NET中集合所依赖的接口被设计为公共的。想要实现对象的枚举就必须继承IEnumerable接口。 public interface IEnumerable { public IEnumerator GetEnumerator(); } 它只有一个成员:GetEnumerator方法。该方法返回一个世纪的枚举器(enumerator)对象。那么要定义一个枚举器就要必须实现IEnumrator接口: public interface IEnumerator { public Boolean MoveNext(); public Object Current { get; } public void Reset(); } 也就是说如果我们希望一个类型支持枚举特性,那么我们就必须还要额外定义一个辅助类型来实现IEnumerator的所有方法。这个辅助类型通常被定义为一个Nested class声明在主类内部。这样在实现的时候我们发现,在app调用GetEnumerator()方法时,我们需要构造一个辅助类型的实例作为返回值。 看一段别人的总结,水平高的人应该理解更深吧。我先贴出来供以后参考。 1、一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方式返回IEnumerator object)。 2、IEnumerator object具体实现了iterator(通过MoveNext(),Reset(),Current)。 3、从这两个接口的用词选择上,也可以看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的class是“可枚举(enumerable)”的,但并没有说明如何实现枚举器(iterator);IEnumerator是一个实现式的接口,IEnumerator object就是一个iterator。 4、IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,client可以通过IEnumerable的GetEnumerator()得到IEnumerator object,在这个意义上,将GetEnumerator()看作IEnumerator object的factory method也未尝不可。 | |
|
现在说说自己的理解 如果某类想实现foreach,就必须实现接口IEnumerable的方法 ,也就是public IEnumerator GetEnumerator();这个方法。 但是GetEnumerator()这个方法返回IEnumerator接口,因此就必须有一个实现IEnumerator接口的三个方法的类 这样就有两种实现方式, 第一:分成两个类,其中一个实现IEnumerable接口的方法,其中给一个实现IEnumerator接口的方法 第二:合并在一个类里面,该类实现IEnumerable,IEnumerator两个接口的四个方法,这样的话GetEnumerator()方法只用返回本身就可以了 | |
| 第一种实现方式,分成两个类的代码 
| |
|
| |
| 第二种实现方式:合并成一个类的代码 
| |
|
| 两者调用方式一样 
| |
| 最后,输出结果 
| |
|
|
posted @ 2010-10-11 14:31 双击 阅读(192) 评论(0)
编辑
| 扩展方法是C# 3.0中新加入的特性。MSDN中对扩展方法的定义是:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新 编译或以其他方式修改原始类型。 扩展方法是静态方法~并且第一个参数要用this修饰~这个方法将作为第一个参数也就是带this参数的类的一个扩展方法~ 定义如下 | |
|
| |
| 调用方法如下,就跟调用本身方法一样 
| |
|
| 显示结果如下 
| |
| 下面是对编写扩展方法要注意的几个原则(当然,仁者见仁、智者见智,这也是一家之言): 扩展方法有就近原则,也就是如果在你的程序里有两个一模一样的扩展方法,一个和你的使用类是处于同一命名空间里,另外一个处于别的命名空间里,这个时候会优先使用同一命名空间里的扩展方法,也就是说“血缘关系”越近,越被青睐。 很多人看到扩展方法也许眼里冒出金光,以后在设计的时候不管三七二十一,反正可以扩展。还有一些人会对类任意扩展,将以前一些作为”Helper”的方法统统使用扩展方法代替,注意的是扩展方法有“污染性”,所以我觉得在扩展的时候还是想想,是不是值得这样扩展。 在扩展的时候也不要对比较高层的类进行扩展,像我上面对object的扩展我觉得就是不可取的,object是所有类的基类,一经扩展,所有的类都被“污染”了。 | |
|
| 在.net 2.0/3.0程序中使用扩展方法 .NET Framework 从2.0升级至3.0/3.5中,增加了不少编译器级别的语法糖,如var关键字、自动属性、Lambda表达式、扩展方法等等。 如果使用vs2008发布.net2.0程序时,除了扩展方法语法糖不可以直接使用。如果发布带扩展方法的程序则会编译出错。究 其原因,是因为编译器将那些方法(扩展方法)带上ExtensionAttribute属性, 而ExtensionAttribute这个类却存在于.NET Framework 3.5的程 序集中。 使用一个小技巧即可以使得带扩展方法的程序在.NET Framework 2.0/3.0时通过编译:自己定义这个ExtensionAttribute属性 namespace System.Runtime.CompilerServices { public class ExtensionAttribute : Attribute { } } 这样, 即使不引用3.5版本的程序集, 也可以享受扩展方法带来的便利! | |
posted @ 2010-10-11 14:31 双击 阅读(24) 评论(0)
编辑