• 我们在数据库中存放的身份证是字符串格式,但是当通过csv文件格式导出后,如果只是正常输出,当用Excel打开时,会发现这些信息都变成科学计数法了。网上提供了一种解决方法,就是加上Tab占位符,但没有明确说明占位符的具体位置。通过试验,发现这个占位符应该加在身份证后面,这样输出后的身份证字段格式就变成:
    "123456789012345678 "
    呵呵,看起来好像是加了个空格。
    具体在程序里,可以使用转义符\t来输入这个占位符,至于导出csv的方法,可看我前面的博文。

  • 对于csv文件导入数据库,有很多种导入方法,这里仅根据我碰到的实例说明一下如何处理大容量、“不规范”CSV文件。
    一、CSV文件的预处理
    一般情况下CSV文件都是来源于其它应用程序导出,我碰到的实例是一个有关外汇业务的,其中有很多字段是英文,自然有很多标准SQL无法接受的东东,如单引号、空格,而且不知道数据源程序那怎么处理的,其中有些字段(都是String类型)用双引号,有些不用。如果直接用ODBC读取(或者您直接使用SQL Server提供的导入数据模块),会出现异常终止的现象。为此,需要将该CSV“标准化”一下,使用LinQ转换成XML,具体代码如下:
                #region 使用LinQ生成XML
                string[] source = File.ReadAllLines(vPath + @"\" + vFileName, Encoding.Default);
                XElement x临时表 = new XElement("Root",
                        from str in source
                        let fields = str.Replace("\",", ",").Replace(",\"", ",").Split(',')
                        select new XElement("收入数据",
                        new XElement("序号", fields[0]),
                        new XElement("交易时间", fields[1]),
                        new XElement("银行所属外汇局", fields[2]),
                        new XElement("申报号码", fields[3]),
                        new XElement("组织机构代码", fields[4]),
                        new XElement("收付款人名称", fields[5]),
                        new XElement("国家地区代码", fields[6]),
                        new XElement("国家地区", fields[7]),
                        new XElement("交易对方名称", fields[8])
                        )
                    );
                x临时表.FirstNode.Remove();     // 去除字段名行
                x临时表.Save(s临时XML);
                #endregion
    二、使用BulkCopy批量导入到SQL Server
    如果数据量较小,可以从上面生成的XML逐条读入到临时表,然后插入到SQL表,虽然可以在插入前进行数据验证,但是这样效率较低,而且我的实例中字段数量多达30多个,写起来实在麻烦,对数据的有效性我也无需关心,所以就采用SQL BulkCopy批量导入的方法。不过为了保证您的数据库日志不飞速膨胀,需要先将数据库日志调整为大容量日志恢复模式:
               USE master;
               ALTER DATABASE <database_name> SET RECOVERY BULK_LOGGED
    下面则是具体的批量导入代码:
                SqlConnection desCon = new SqlConnection(db.strConn);
                SqlBulkCopy bulkCopy = new SqlBulkCopy(db.strConn);
                try
                {
                    DataSet ds = new DataSet();
                    ds.ReadXml(s临时XML);
                    bulkCopy.BatchSize = 500;
                    bulkCopy.BulkCopyTimeout = 10;
                    bulkCopy.NotifyAfter = 1;
                    bulkCopy.DestinationTableName = rab类型.SelectedValue;
                    bulkCopy.WriteToServer(ds.Tables[0]);
                catch 
                { }
                finally
                {
                    bulkCopy.Close();
                    desCon.Close();
                }
    三、数据导出到CSV文件
    这方面的例子不少,需要注意的是当导出的数据量在上万条,比如超过6万时,服务器会抛出溢出等异常。因此一是需要修改Web服务的最大文件长度:
    在网站的web.config的system.web一节增加:
        《httpRuntime maxRequestLength="100000" executionTimeout="3600"》
    二是应该使用StringBuilder而不是StringWriter,具体代码如下:
            private void downloadToCSV(DataTable dt, string a数据文件名)
            {
                StringBuilder sw = new StringBuilder();

                var vColNum = dt.Columns.Count;
                for (int i = 0; i < vColNum; i++)
                {
                    sw.Append("\"" + dt.Columns[i] + "\"");
                    if (i < vColNum - 1) sw.Append(",");
                }
                sw.AppendLine();
                foreach (DataRow dr in dt.Rows)
                {
                    for (int i = 0; i < vColNum; i++)
                    {
                        if (!Convert.IsDBNull(dr[i]))
                            sw.Append("\"" + dr[i].ToString().Trim() + "\"");
                        else
                            sw.Append("\"\"");
                        if (i < vColNum - 1) sw.Append(",");
                    }
                    sw.AppendLine();
                }

                HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + a数据文件名 + ".csv");
                HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");  //UTF-8");
                HttpContext.Current.Response.Write(sw);
                HttpContext.Current.Response.End();
            }

  • 家里买的沐浴球经常散架,老去买新的又觉得浪费,不知道是不是厂家故意的,弄得比较容易散,而且上网搜了半天也没合适的缠法,自己研究了好几种缠法,都不太像原装的,呵呵。今晚又试了一种比较简单的,缠起来比较像了:
    把散开的球展开,可以看到是个类似长筒袜的圆筒,用绳子从筒中间穿过,勒紧,然后再从反方向穿过,勒紧,呵呵,这样是不是比较像了?剩下的就是多打几个结了。

  • 最近做了一个简单的批量导入、查询项目,像这种项目以前也做过,但是基本上只批量导入一次,可这回是有可能每天操作,如果不采取措施,服务器上的事务日志很快就会增加到GB以上。本想直接限制日志文件大小就行,可实际上也会出现事务日志的错误提示。经过上MSDN和相关网站搜索,终于确定一套可行办法:
    1、首先设定数据库为“大容量日志恢复”:
    USE master;
    ALTER DATABASE <database_name> SET RECOVERY BULK_LOGGED

    2、清空您的日志:
    dump transaction <database_name> with no_log

    3、压缩数据库或数据库日志文件:
    dbcc shrinkdatabase(<database_name>)
    或者在管理平台上右键数据库的任务--收缩--文件,选择日志文件,并选中“在释放未使用的空间前重新组织页”及收缩到的文件大小。

    上面的2、3步可以在编程中导入前后通过执行SQL语句进行,这样您的日志基本就是不保存了。

  • 最近做了一个小项目,由于版面排版的问题,不得不使用了AJAX的PopupControlExtender,但是当我在弹出的Panel中使用了Button按钮的时候,发现无法触发Button的服务器OnClick事件,反复试了N遍,把UpdatePanel放在里面外面的捣鼓了半天也不行,我苦啊。后来终于从网上发现一个哥们的正解:http://www.cnblogs.com/sgsoft/archive/2007/07/11/814730.html。其实比较简单,就是把Button的UseSubmitBehavior属性设为False即可。或者还有个办法就是使用LinkButton,嘿嘿,但这样只是逃避问题的一个方法,其实很奇怪的,在弹出的Panel中除了Button,其他的什么RadioButton或者CheckBox都可以,后来看了这哥们的解释,好像是和回发机制有关了。

    • 6本经典网络文学分别是《鬼吹灯》、《斗罗大陆》、《平凡的清穿日子》、《庆余年》、《篡清》、《史上第一混乱》。5本经典传统文学则是《格萨尔王》、《国画》、《人间》、《舞者》、《狙击手》。 2010-08-18 17:01:37

    • QQ也太和谐了,修改个签名“午夜销魂”都不成功 2010-08-19 10:47:56


    • 查看详细内容(文章通过打嘀发送)
  • 针对一些重要业务和特殊应用,使用时要求保证带宽,不用时又能将带宽让出来给其他应用,可用如下设置访问控制列表和数据包染色技术来实现。
    1.设置如下的访问控制列表
    access-list 102 permit ip 网段1IP 子网掩码 host 服务器1IP
    access-list 103 permit ip 网段2IP 子网掩码 host 服务器2IP
    access-list 104 permit ip 网段3IP 子网掩码 host 服务器3IP

    2.数据包染色标记
    class-map match-all Critical-1
        match ip dscp 34
    class-map match-all Critical-2
        match ip dscp 26
    class-map match-all Critical-3
        match ip dscp 35

    3.数据包染色分类
    class-map match-any Critical-1
        match access-group 102 /*匹配访问控制列表102 */
    class-map match-any Critical-2
        match access-group 103 /*匹配访问控制列表103 */
    class-map match-any Critical-3
        match access-group 104 /*匹配访问控制列表104 */

    4.策略定义
    policy-map AA
    class Critical-1
        bandwidth percent 10 /*定义保障带宽为基本带宽的10% */
        random-detect dscp-based /*定义路由器带宽拥塞时的数据包丢弃策略 */
    random-detect dscp 34  24   40   10 
    /* 定义发生拥塞时DSCP=34数据包的最小丢包率/最大丢包率/丢弃概率分别是:24/40/10 */
      class Critical-2
      bandwidth percent 5
      random-detect dscp-based
      random-detect dscp 26   24    40    10
      classs Critical-3
      bandwidth percent  2
      random-detect dscp-based
      random-detect dscp 35   24    40    10

    5.在路由器相应端口上进行策略应用
    interface Serial0/0
    service-policy output AA
    如上设置后,即实现了在端口Serial0/0上符合访问控制列表102的业务保障带宽是基本带宽的10%,符合访问控制列表103的业务保障带宽为基本带宽的5%,符合访问控制列表104的业务保障带宽为基本带宽的2%。

    • Qos确实有些用,回去有时间把俺们的互联网好好调一下 2010-08-17 23:18:07

    • 今天领导终于把我们隔离到养马岛上了,虽然条件不错,但似乎晚了些,还什么临阵磨枪,俺无奈的回了一句:那只是个传说 2010-08-17 23:19:14


    • 查看详细内容(文章通过打嘀发送)