sqlite一次性执行行数

经过测试,sqlite 一次性执行超过4万行数据就会出问题。
测试是最高执行行数是 39998行,用了 500ms。
一般30000以上就容易出问题了。

读取属性(Property)中的特性(Attribute)


    //TestParamAttribute 是数据约束特性
    //DBType、DBLenght 是具体的约束
    [AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
    public class TestParamAttribute : Attribute
    {
        private string dBType;

        public string DBType
        {
            get { return dBType; }
            set { dBType = value; }
        }
        private int dBLenght;

        public int DBLenght
        {
            get { return dBLenght; }
            set { dBLenght = value; }
        }
    }

    //为类中的属性定义约束特性
    class Tester
    {
        private int iD;
      
        [TestParam(DBType="varchar",DBLenght=4)]
        public int ID
        {
            get { return iD; }
            set { iD = value; }
        }
        private string testName;
       
        [TestParam(DBType="varchar",DBLenght=50)]
        public string TestName
        {
            get { return testName; }
            set { testName = value; }
        }
    }


     Tester test = new Tester();
      test.ID = 1;
      test.TestName = "未完待续";

       //读取对象的 属性、属性的特性、特性的具体约束

       Type t = test.GetType();

        PropertyInfo[] ps = t.GetProperties(); //类的属性列表,对应sql语句的参数(没有指明具体的对象)

        foreach (PropertyInfo p in ps)  //遍历属性列表,可以得到每一个属性
        {
             // label1.Text += "@" + p.Name + "=" + p.GetValue(test, null).ToString() + ",";//获取指明的对象‘test’的各个属性和值
             //p.GetCustomAttributes(false) 获得每个属性的特性(Attribute)列表
             //遍历特性列表,可以得到每个特性对象
             foreach (object o in p.GetCustomAttributes(false))
             {
                  if (o.GetType().Equals(typeof(TestParamAttribute))) //校验特性是否符合预设特性类型
                  {
                        TestParamAttribute tpa = (TestParamAttribute)o; //将对象强制转化为特性类型
                         //获取指明的对象‘test’的各个属性的特性中各个具体约束的值
                         label1.Text += "@" + p.Name + "(" + tpa.DBType + "," + tpa.DBLenght + ")" + "=" + p.GetValue(test,null).ToString() + ",";//p.GetValue(test, null) 函数指定需要获取的对象
                   }
               }
          }

android 开发环境记

    同事给了个2G多的包,里面带有java jdk android sdk  等。装了半天,上网搜了很多方法,都不顶用。

到最好才发现,原理他发过来的东西都是配置好的了。只需要在在系统中配置路劲就OK了。。。

无语。。。。

千辛万苦,终于运行了第一个android应用。

hello,android!

惨痛教训

请别在Timer 控件的事件中写循环。否则会很惨。。。

在sleep下,就更爽了。

CKEditor3.3.1精简版本

众所周知,CKEditor是一款强大的web编辑器,前身是KFCEditor,经过重写,配置简单,界面美观,几乎完美的web编辑器选择。
但是下载下来之后体积比较大。传FTP时就浪费很多时间。鉴于很多东西都是不必要的,所以为方便使用,这里我自己做了个精简版
精简的内容主要是 1.源码 2.语言包(只保留了英文、简体中文、繁体中文) 3.示例文件、4.只留一个kama皮肤

ckfinder_aspnet是CKEditor用于asp.net web下的独立上传插件。也做了相应的精简
提供给大家下载

进入google code下载 http://code.google.com/p/yunweier/downloads/list
CKEditor3.3.1精简版本 解压后805KB
ckfinder_aspnet_1.4.1.1.精简版.rar 解压后332KB  

windows2003 远程桌面连接“已达最大连接数”的解决办法

都知道默认情况下windows2003允许远程终端连接的数量是2个用户
有时候会出现"已达最大连接数"提示,无法登入远程桌面。
产生此提示的原因是以前使用远程桌面时直接关闭了窗口,而不是“注销”用户,导致远程桌面窗口虽已关闭,但用户使用的资源并未释放,达到系统允许最多连接数限制。
所以最好养成一个习惯用注销退出远程桌面
解决的办法如下:
1. 强制远程连接到服务器
   找一台windows2003的计算机(XP和Win7好像不行)。在“运行”窗口输入“mstsc /v:192.168.1.1 /console”。强制登录到远程服务器。
2.登陆到远程桌面,此时的Id应该是0。
3.运行“cmd”进入控制台:
4.输入query user 命令记录下已登录用户的ID
   会发现 有三个用户的状态正在“运行中” Id分别为 0、1、2 0是当前强行登陆登陆的Id
5.用logoff Id 命令注销已登录用户: logoff 1 和 logoff 2。
  logoff 0将注销当前的强行登陆的用户。

OK,一切正常!!以后最好是不要直接关闭远程桌面的窗口,应该使用注销!

asp.net中使用html页面作为模板的思路

在asp.net中使用.master文件作为模板很方便,但是不利于产品的扩展。因为内容和设计都是放在asp.net页面中的,asp.net页面有两个文件:aspx和.cs文件,产品发布后cs文件时被编译的。如果想要修改模板的话还得修改asp.net的文件,对于一个没有技术功底的设计人员来说,这是比较麻烦的。对于程序的安全性也是不可取的。

php中的思路:
通常在php的cms中,一般是使用html文件中加入特定的标签,然后再通过程序读取套用在php中。这是一种很有效的方式,使得产品发布后,模板的开发,更加灵活和便捷,使内容和设计分开。

那么在asp.net中使用这种方式无疑比.net平台自带的.master模板具有更大的灵活性和优越性。
1.程序中定义了可以使用的标签。例如:{#URL}
2.设计人员制作html文件当做模板并在里面嵌入指定的标签
3.程序读取指定路劲的html文件的内容(html)到程序中的一个字符串变量中。
4.并检查出标签,根据标签读取数据。
5.使用replace方法用读取出来的数据替换字符串。
6.将最终结果输出到指定asp.net文件中。
 

asp.net中实现flash幻灯

一直以为在asp.net中实现幻灯很难。
在网上找了一番之后,其实也很简单的。在这里我并没有使用js。只要内容串起来传给 flash 的flashvar属性就可以了。
效果:

首先,我把幻灯所需要的数据存储在xml文件中
然后,程序读取出数据。
 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Xml;
using System.Xml.Serialization;
using System.IO;

/// <summary>
///FlashViewer 的摘要说明
/// </summary>
public class FlashViewer
{
    private string title;

    public string Title
    {
      get { return title; }
      set { title = value; }
    }

    private string path;

    public string Path
    {
      get { return path; }
      set { path = value; }
    }

    private string links;

    public string Links
    {
      get { return links; }
      set { links = value; }
    }
    public static List<FlashViewer> FlashViewerGet()
    {
        List<FlashViewer> list=new List<FlashViewer>();
        
        XmlDocument doc = new XmlDocument();
        string path=System.Web.HttpContext.Current.Server.MapPath("~/") + "App_Data/FlashViewer.xml";
        if (File.Exists(path))
        {
            doc.Load(path);
            foreach (XmlNode node in doc.SelectNodes("//Flash"))
            {
                FlashViewer f = new FlashViewer();

                f.Title = node.ChildNodes[0].InnerText;
                f.Path = node.ChildNodes[1].InnerText;
                f.Links = node.ChildNodes[2].InnerText;
                list.Add(f);
            }
        }
        else
        {
            throw FileNotFoundException;
            //找不到指定文件!
        }
        return list;
    }
}



最后,在界面中,将数据串起来赋给flashvar属性
界面源中加入


    <embed src="Images/viewer.swf" wmode="opaque" width="<%=width() %>" height="<%=height() %>" FlashVars="<%=BindFlashVar() %>" menu="false" bgcolor="#DAF3CE" quality="high" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"/>


界面cs代码


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected string BindFlashVar()
    {
        List<FlashViewer> list = FlashViewer.FlashViewerGet();

        string pics = "";  //定义图片的路径,我这里是写死了,你可以设置成一个变量
        string title = ""; //幻灯片中的新闻标题
        string links = ""; //幻灯片中的链接格式
        
        for (int i = 0; i < list.Count; i++) //循环,
        {
            pics += list[i].Path.ToString() + "|";
            title += list[i].Title.ToString() + "|";
            links += list[i].Links.ToString() + "|";
        }
        //将retpics,rettitle,rettitle连成一个长字符串
        string retString = "pics=" + pics + "&links=" + links + "&texts=" + title + "&borderwidth=" + borderwidth + "&borderheight=" + borderheight + "&textheight=" + textheight;
        return retString; //返回前台Flash所需的一个FlashVar的参数值
    }
    protected string borderwidth = "480";
    protected string borderheight = "320";
    protected string textheight = "20";

    protected int width()
    {
       return Convert.ToInt32(borderwidth);
    }
    protected int height()
    {
        return Convert.ToInt32(borderheight) + Convert.ToInt32(textheight);
    }
}


下载源文件
 

js实现无刷新提示,并渐变关闭(非弹窗)——仿163,qq邮箱顶部绿色提示

看到,qq邮箱,163邮箱,gmail邮箱,在删除或者转移信件的时候都市在顶部刷出一个提示,渐变消失,并且页面本身不刷新。觉得这个功能很好,在网上搜索找到的都是弹窗的提示。
于是想着自己做一个,于是就有了以下的结果。
实现原理是:
设置默认一个div元素为隐藏,提过js DOM对象实现div显示,并插入需要显示的内容。
使用.style.visibility 和.style.dispaly都可以控制元素的是否可视,但是在这里建议使用.style.visibility 属性,如果使用.style.dispaly可能会出一些小问题。比如:已经触发果了ShowMessage函数后,不刷新页面在想触发的话,会没有效果。
渐变的原理是:使用递归函数控制div 上一层div的可见度。默认是100,为最高可见。通过递归,可见度慢慢减弱。直到0为不可见。
演示地址:http://test.lovedear.info/jstest/js249.html
代码如下:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>显示提示,并渐变关闭(原创)</title>

<!--实现 支持-->
<script language="javascript">

var strHtml;
function ShowMessage(m,color){
        messageBox.style.filter="alpha(opacity=100)";
        messageBox.style.visibility="visible";

        message.style.visibility="visible";
        //录入内容
        strHtml="<div style='background:"+color+"; padding:3px 10px; height:15px; color:#FFFFFF; font-size:13px;'><a>"+m+"</a></div>";
        message.innerHTML=strHtml;
        setTimeout("Close()",3000);//调用关闭的时间
}
var i=100;
function Close(){
    if(i<=0){
        message.style.visibility="hidden";
        strHtml="";
        
        //还原属性和参数
        i=100;
        messageBox.style.filter="alpha(opacity=100)";
        messageBox.style.visibility="visible";
        clearTimeout();
        return;
    }
    else{
        i--;
        messageBox.style.filter="alpha(opacity="+i+")";//刷新可见度,可见度越来越低
        setTimeout("Close()",10);//递归
    }
    return;
}

</script>
</head>

<body>
<div id="messageBox" style="width:200px; height:30px;">
  <div id="message" style="dispaly:none;"></div>
</div>
由www.lovedear.com.cn编写
<br /><br /><br /><br /><br />
<a href="#" onClick='ShowMessage("无法成功...","#ef8f00")'>无法成功</a>
<br /><br />
<a href="#" onClick='ShowMessage("删除成功...","#68af02")'>删除成功</a>
<br>

<br>
</body>
</html>

asp.net 解决 datetime 不能为Null的问题

项目中遇到的一个问题,在数据库中,datetime 类型是允许为 NULL 的,但在程序当中,datetime类型默认是不允许为空(null)的。但是项目中偏偏是要允许为空的,比如一辆车的到达时间,在车出发时是不知道的,必须要等到车到达之后再对其到达时间进行更新。那么该如果实现呢?
在网上早了很久,发现这样一种做法。原理就是把变量 设置为允许为null的datetime类型。、
网上的资料有点乱。

下面是我在项目中的实现。应该能够说明,解决问题的思路和和过程。贴上来分享之。
1.声明变量的时候
       ///
       /// 设置其为允许为空
       ///

        private Nullable reachDate;

        public Nullable ReachDate
        {
            get { return reachDate; }
            set {

                reachDate = value; }
        }

2.在使用的时候,如果不给字段赋值,默认的就是null,它的hasValue就应该为flase的。
注意:请不要设置其=null 否则会出现“可为空的对象必须具有一个值。”错误if

//判断用户是否输入了日期,如果输入则赋值
(txtReachDate.Text.ToString().Trim()!="")
{
    ReachDate = Convert.ToDateTime(txtReachDate.Text.ToString().Trim());
}

3.写入数据库的时候,给参数赋值。

SqlParameter[] parmas = new SqlParameter[]
{
new SqlParameter("@Id", SqlDbType.VarChar, 20),

new SqlParameter("@ReachDate",SqlDbType.DateTime)
};
parmas[0].Value = c.Id;
//判断如果为空值
if (c.ReachDate == null)
{
    parmas[1].Value = DBNull.Value;//在数据库中就是 NULL
}
else
{
    parmas[1].Value = Convert.ToDateTime(ReachDate);
}

3.使用SqlDataReader 读取数据时
SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.PaperConnectionString, CommandType.StoredProcedure, "CarGetList", null);
reader.Read();
if (reader.HasRows)
{
          //数据读取的时候,要判断其是否为 NULL,在赋值到 ReachDate属性中
      if (reader["ReachDate"] is DBNull)
         {
         }
         if(reader["ReachDate"] == DBNull.Value)
         { }
         else
         {
                carteam.ReachDate = Convert.ToDateTime(reader["ReachDate"]);
         }
}
else
{
}
reader.Close();