-
2011-03-25
解决csv文件中的身份证、帐号信息在Excel中读取异常 - [软件开发]
我们在数据库中存放的身份证是字符串格式,但是当通过csv文件格式导出后,如果只是正常输出,当用Excel打开时,会发现这些信息都变成科学计数法了。网上提供了一种解决方法,就是加上Tab占位符,但没有明确说明占位符的具体位置。通过试验,发现这个占位符应该加在身份证后面,这样输出后的身份证字段格式就变成:
"123456789012345678 "
呵呵,看起来好像是加了个空格。
具体在程序里,可以使用转义符\t来输入这个占位符,至于导出csv的方法,可看我前面的博文。 -
2011-01-09
c#+SQL Server中大容量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();
} -
家里买的沐浴球经常散架,老去买新的又觉得浪费,不知道是不是厂家故意的,弄得比较容易散,而且上网搜了半天也没合适的缠法,自己研究了好几种缠法,都不太像原装的,呵呵。今晚又试了一种比较简单的,缠起来比较像了:
把散开的球展开,可以看到是个类似长筒袜的圆筒,用绳子从筒中间穿过,勒紧,然后再从反方向穿过,勒紧,呵呵,这样是不是比较像了?剩下的就是多打几个结了。 -
2010-11-23
SQL Server批量导入如何减少日志 - [软件开发]
最近做了一个简单的批量导入、查询项目,像这种项目以前也做过,但是基本上只批量导入一次,可这回是有可能每天操作,如果不采取措施,服务器上的事务日志很快就会增加到GB以上。本想直接限制日志文件大小就行,可实际上也会出现事务日志的错误提示。经过上MSDN和相关网站搜索,终于确定一套可行办法:
1、首先设定数据库为“大容量日志恢复”:
USE master;
ALTER DATABASE <database_name> SET RECOVERY BULK_LOGGED2、清空您的日志:
dump transaction <database_name> with no_log3、压缩数据库或数据库日志文件:
dbcc shrinkdatabase(<database_name>)
或者在管理平台上右键数据库的任务--收缩--文件,选择日志文件,并选中“在释放未使用的空间前重新组织页”及收缩到的文件大小。上面的2、3步可以在编程中导入前后通过执行SQL语句进行,这样您的日志基本就是不保存了。
-
2010-10-13
AJAX PopupControlExtender中如何使用Button按钮 - [软件开发]
最近做了一个小项目,由于版面排版的问题,不得不使用了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都可以,后来看了这哥们的解释,好像是和回发机制有关了。
-
2010-09-01
闲言碎语(2010.08.25-09.01)
- 妻子,小舅子,小姨子(打一山东自然景观) 答案 泰山日出 2010-08-26 20:08:28
查看详细内容(文章通过打嘀发送) - 妻子,小舅子,小姨子(打一山东自然景观) 答案 泰山日出 2010-08-26 20:08:28
-
2010-08-25
闲言碎语(2010.08.18-08.25)
- 6本经典网络文学分别是《鬼吹灯》、《斗罗大陆》、《平凡的清穿日子》、《庆余年》、《篡清》、《史上第一混乱》。5本经典传统文学则是《格萨尔王》、《国画》、《人间》、《舞者》、《狙击手》。 2010-08-18 17:01:37
- QQ也太和谐了,修改个签名“午夜销魂”都不成功 2010-08-19 10:47:56
查看详细内容(文章通过打嘀发送) - 6本经典网络文学分别是《鬼吹灯》、《斗罗大陆》、《平凡的清穿日子》、《庆余年》、《篡清》、《史上第一混乱》。5本经典传统文学则是《格萨尔王》、《国画》、《人间》、《舞者》、《狙击手》。 2010-08-18 17:01:37
-
2010-08-20
利用访问控制列表实现QoS【转】 - [资料技巧]
针对一些重要业务和特殊应用,使用时要求保证带宽,不用时又能将带宽让出来给其他应用,可用如下设置访问控制列表和数据包染色技术来实现。
1.设置如下的访问控制列表
access-list 102 permit ip 网段1IP 子网掩码 host 服务器1IP
access-list 103 permit ip 网段2IP 子网掩码 host 服务器2IP
access-list 104 permit ip 网段3IP 子网掩码 host 服务器3IP2.数据包染色标记
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 353.数据包染色分类
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 105.在路由器相应端口上进行策略应用
interface Serial0/0
service-policy output AA
如上设置后,即实现了在端口Serial0/0上符合访问控制列表102的业务保障带宽是基本带宽的10%,符合访问控制列表103的业务保障带宽为基本带宽的5%,符合访问控制列表104的业务保障带宽为基本带宽的2%。 -
2010-08-18
闲言碎语(2010.08.03-08.18)
- Qos确实有些用,回去有时间把俺们的互联网好好调一下 2010-08-17 23:18:07
- 今天领导终于把我们隔离到养马岛上了,虽然条件不错,但似乎晚了些,还什么临阵磨枪,俺无奈的回了一句:那只是个传说 2010-08-17 23:19:14
查看详细内容(文章通过打嘀发送) - Qos确实有些用,回去有时间把俺们的互联网好好调一下 2010-08-17 23:18:07
-
2010-08-03
闲言碎语(2010.07.27-08.03)
- 济南啊,真不想去又真舍不得不去的省会啊,如果不是工作需要,打死我也不自己去! 2010-08-02 22:34:02
查看详细内容(文章通过打嘀发送) - 济南啊,真不想去又真舍不得不去的省会啊,如果不是工作需要,打死我也不自己去! 2010-08-02 22:34:02









