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) 编辑

前一篇IEnumerable和IEnumerator的理解[原]介绍了这两个接口用来实现foreach

其实还可以用yield return

直接上代码和结果


一下为摘录的一部分,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) 编辑