导出csv时,在数据项前加上等号可以防止长数字以指数表示

今天帮同事导数据(csv格式),发现大数字问题以指数形式表示,这倒没什么问题,把excel的单元格拉宽一些就行了。可是有些是以0开头的字符也被以指数化了,而且把前面的0丢掉了,这是个大问题。网上查尽资料,没找到好的办法,记得看过别人导的数据加了等号,当时不理解,试了一下,果然是解决这个问题的~

龙生   19 Sep 2016
View Details

Thinkpad笔记本各系列型号的区别

T系列,旗舰系列,综合性能做好的,低中高配置都有,显卡,集成,低端入门独显,或是双显卡,内建光驱,可以非常方便的更换成硬盘或是电池。键盘7排设计,磨砂屏幕,有的是高分屏,键盘灯设计。14寸或是15.6寸的机器。也有轻薄性的带s的,比如T420s,比普通的T重量轻一些。薄一些。也有一部分低配置的带i后缀的机器。很多机器都配备指纹识别器。T系列,适合于对性能有一定要求,移动性稍微少一些的商业用户。基本价格6000以上。 X系列,移动旗舰。12寸的设计,全系列集成下那可,没有内建光驱,重量轻,电池使用时间长,其他键盘,屏幕等特点的跟T系列差不多。也有更轻薄型。X系列中,还有一部分带有t后缀的可以旋转屏幕的平板机器,一般是电磁笔控制,有的也有手触功能。比如T201t。该系列适合经常出差的商业人士。基本价格5500以上。 W系列,移动工作站系列,一般是15.6寸设计,曾有过17寸设计,但是可能是因为价格问题,不做了。性能最强的系列。使用半专业显卡,这些显卡驱动针对专用工具进行过优化,速度更快。其他的特点,跟T系列差不多。但是没有带s后缀的轻薄型了。W系列适合那些设计人员,或是对性能要求比较高的移动商业用户。价格一般都是8000以上开始。 R系列,采用了 Intel Centrino Duo 移动技术 – 包括 Intel Core™2 Duo 处理器,可以提高性能、增强可管理性并且延长电池寿命。 E系列,基本说是挂牌系列,除了指点杆,没有什么硬件上面的thinkpad的特点。也就是除了指点杆,跟其他品牌是一样的。没什么大的优势。现在的出机器,基本都是巧克力键盘。该系列部分机器还带背光的。6排键盘设计。尺寸从12到15.6都有。一般都是普通分辨率的镜面屏幕。外壳有多种颜色,比如红色。该系列,配置一般主流,很多都是中端独立显卡。适合家用用户。 sl系列,联想2008年推出的低价系列,但是因为做工问题,已经停产了。基本特点跟E系列差不多。 S系列,基本就是E系列中的带s后缀的机器,单独排列了一个系列而已。价格高,特点同E系列。   from:http://zhidao.baidu.com/link?url=h-cpOxeraqIwugNVUHPoSF-B0DrhPAeadAB-p5QsXmCHwmV_q0QCMFxviggEk6VmZb9Qz38Jnv-kxVIl2a0--q

龙生   19 Sep 2016
View Details

线程同步(C# 和 Visual Basic)

以下各节描述了在多线程应用程序中可以用来同步资源访问的功能和类。 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行。对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应。对于服务器应用程序,多线程处理提供了用不同线程处理每个传入请求的能力。否则,在完全满足前一个请求之前,将无法处理每个新请求。 然而,线程的异步特性意味着必须协调对资源(如文件句柄、网络连接和内存)的访问。否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作。结果将产生不可预知的数据损坏。 对于整数数据类型的简单操作,可以用 Interlocked 类的成员来实现线程同步。对于其他所有数据类型和非线程安全的资源,只有使用本主题中的结构才能安全地执行多线程处理。 有关多线程编程的背景信息,请参见: Managed Threading Basics Using Threads and Threading Managed Threading Best Practices 锁和 SyncLock 关键字 lock (C#) 和 SyncLock (Visual Basic) 语句可以用来确保代码块完成运行,而不会被其他线程中断。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。 lock 或 SyncLock 语句有一个作为参数的对象,在该参数的后面还有一个一次只能由一个线程执行的代码块。例如: C#

提供给 lock 关键字的参数必须为基于引用类型的对象,该对象用来定义锁的范围。在上面的示例中,锁的范围限定为此函数,因为函数外不存在任何对对象 lockThis 的引用。如果确实存在此类引用,锁的范围将扩展到该对象。严格地说,提供的对象只是用来唯一地标识由多个线程共享的资源,所以它可以是任意类实例。然而,实际上,此对象通常表示需要进行线程同步的资源。例如,如果一个容器对象将被多个线程使用,则可以将该容器传递给 lock,而 lock 后面的同步代码块将访问该容器。只要其他线程在访问该容器前先锁定该容器,则对该对象的访问将是安全同步的。 通常,最好避免锁定 public 类型或锁定不受应用程序控制的对象实例。例如,如果该实例可以被公开访问,则 lock(this) 可能会有问题,因为不受控制的代码也可能会锁定该对象。这可能导致死锁,即两个或更多个线程等待释放同一对象。出于同样的原因,锁定公共数据类型(相比于对象)也可能导致问题。锁定字符串尤其危险,因为字符串被公共语言运行时 (CLR)“暂留”。这意味着整个程序中任何给定字符串都只有一个实例,就是这同一个对象表示了所有运行的应用程序域的所有线程中的该文本。因此,只要在应用程序进程中的任何位置处具有相同内容的字符串上放置了锁,就将锁定应用程序中该字符串的所有实例。因此,最好锁定不会被暂留的私有或受保护成员。某些类提供专门用于锁定的成员。例如,Array 类型提供 SyncRoot。许多集合类型也提供 SyncRoot。 有关 lock 和 SyncLock 语句的更多信息,请参见以下主题: “锁定”语句(C# 参考) SyncLock 语句 监视器 监视器 与 lock 和 SyncLock 关键字类似,监视器防止多个线程同时执行代码块。 Enter 方法允许一个且仅一个线程继续执行后面的语句;其他所有线程都将被阻止,直到执行语句的线程调用 Exit。这与使用 lock 关键字一样。例如: C#

这等效于: C#

使用 lock (C#) 或 SyncLock (Visual Basic) 关键字通常比直接使用 Monitor […]

龙生   17 Sep 2016
View Details

“锁定”语句(C# 参考)

lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。 下面的示例包含一个 lock 语句。

有关更多信息,请参见 线程同步(C# 和 Visual Basic)。 备注 lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程尝试进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。 线程处理(C# 和 Visual Basic) 这节讨论了线程处理。 lock 关键字在块的开始处调用 Enter,而在块的结尾处调用 Exit。 ThreadInterruptedException 引发,如果 Interrupt 中断等待输入 lock 语句的线程。 通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。 常见的结构 lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 违反此准则: 如果实例可以被公共访问,将出现 lock (this) 问题。 如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。 由于进程中使用同一字符串的任何其他代码都将共享同一个锁,所以出现 lock("myLock") 问题。 最佳做法是定义 private 对象来锁定, 或 private static 对象变量来保护所有实例所共有的数据。 在 lock 语句的正文不能使用 等待 关键字。 示例 下面演示在 C# 中使用未锁定的线程的简单示例。 C#

示例 下例使用线程和 lock。 只要 lock 语句存在,语句块就是临界区并且 balance 永远不会是负数。 C#

from:https://msdn.microsoft.com/zh-cn/library/c5kehkcz.aspx

龙生   17 Sep 2016
View Details

Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.

一.问题描述  014-12-15 20:00:29 4398 [Warning] Unsafe statement written to the binary log using statement format since  BINLOG_FORMAT = STATEMENT. INSERT… ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is unsafe Statement: INSERT INTO longxibendi (lxid, l_id, l_aplply, l_types, ctimes) VALUES  (75692, 218, 8, 2, 1418644829) ON DUPLICATE KEY UPDATE ctimes=1418644829 一个mysql master 的err log 报上面的错误。 二.问题原因 查了下原因,longxibendi这个表上有2个唯一键。则使用 INSERT… ON DUPLICATE KEY UPDATE   ,且当前数据库binlog_format是statement格式,这种sql语句就会报unsafe。 查了下手册 INSERT … ON DUPLICATE KEY UPDATE statements on tables with multiple primary or unique keys.  When executed against a table that contains more than one primary or unique key, this statement is considered unsafe, being sensitive to the order in which the storage engine checks the keys, which is not deterministic, and on which the choice of rows updated by the MySQL Server depends. An INSERT … ON DUPLICATE KEY UPDATE statement against a […]

龙生   16 Sep 2016
View Details

mysql报错IP address could not be resolved解决方法

这个警告不会影响数据库的访问 但是当有大量的这种日志产生的时候,数据库之前的错误信息 就会很难去查询了。连接数越多,产生报警日志的频率越高。 一、错误描述 数据库的alert.log中,我们经常会出现下面的警告:

二、问题产生的原因 出现错误的原因是MYSQL Server在本地内存中维护了一个非本地的Client TCP cache,这个cache中包含了远程Client的登录信息,比如IP地址,hostname等信息。 如果Client连接到服务器后,Mysql首先会在本地TCP池中根据IP地址解析客户端的hostname或者反解析,如果解析不到,就会去DNS中进行解析,如果还是解析失败 就是在error log中写入这样的警告信息。 三、解决的办法: 1、修改配置文件 可以通过两个参数来disable这个功能,在MYSQL的配置文件中[mysqld]中加入下面的参数:

重新授权,将所有访问数据库服务器的授权方式都改成IP形式的。

2、添加授权。 将所有访问数据库服务器的授权方式都改成IP形式。 不同的用户用不同的用户名和密码。

然后去 mysql数据库下面的 user表  和db表 下面删除掉那些含有含有主机名字的权限记录。 四、总结 1、要么加上

使得MySQL将不再通过DNS解析地址。 2、赋予权限 要么在赋予权限的时候 直接用ip地址,去掉那些用主机名字的权限。 from:http://www.uedsc.com/ip-address-could-not-be-resolved.html

龙生   16 Sep 2016
View Details

Entity Framework 增删改查和事务操作

1、增加对象

2、删除对象,删除只需要对象的主键

3、修改对象 方法一:

方法二:方法一中每次都需要对所有字段进行修改,效率低,而且麻烦,下面介绍修改部分字段

4、使用事务:使用事务很简单,只要把需要的操作放在 TransactionScope 中,最后提交

5、查询:查询通过LinQ查询

  from:http://www.cnblogs.com/bomo/p/3331602.html

龙生   15 Sep 2016
View Details

Entity Framework中的批量提交与事务处理

在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数。 要使用批量修改或者批量删除数据,就需要SaveChanges(false)+AcceptAllChanges()方法了。 SaveChanges(false) 只是通知EF需要对数据库执行的操作,在内存中是属于挂起状态,在必要的时候是可以撤销的,比如AcceptAllChange()提交为真正成功,EF将撤销SaveChanges(false)的操作。  而在处理分布式事务操作的时候,就有必要使用TransactionScope 来处理了,很多时候我们会这样写:

但是这样写是有风险的,假  如context1.SaveChanges()成功了,context2.SaveChanges()却是有问题的,我们在scope.Complete()提交事务的时候就会终止,而Context1已经成功执行了 这可能不一定符合我们的需要。如果我们需要 context1、context2要不同时执行成功,要不都不成功,我们需要对代码作小小的调整,如用下面的代码:   

我们用SaveChanges(false)先将必要的数据库操作命令发送给数据库,这是注意context1与context2并没有真正发生改变,如果事务终止,自动回滚,两者的更改都没有真正提交到数据库,所以是可以成功回滚的。 在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数。 要使用批量修改或者批量删除数据,就需要SaveChanges(false)+AcceptAllChanges()方法了。 SaveChanges(false) 只是通知EF需要对数据库执行的操作,在内存中是属于挂起状态,在必要的时候是可以撤销的,比如AcceptAllChange()提交为真正成功,EF将撤销SaveChanges(false)的操作。  而在处理分布式事务操作的时候,就有必要使用TransactionScope 来处理了,很多时候我们会这样写:

但是这样写是有风险的,假  如context1.SaveChanges()成功了,context2.SaveChanges()却是有问题的,我们在scope.Complete()提交事务的时候就会终止,而Context1已经成功执行了 这可能不一定符合我们的需要。如果我们需要 context1、context2要不同时执行成功,要不都不成功,我们需要对代码作小小的调整,如用下面的代码:   

我们用SaveChanges(false)先将必要的数据库操作命令发送给数据库,这是注意context1与context2并没有真正发生改变,如果事务终止,自动回滚,两者的更改都没有真正提交到数据库,所以是可以成功回滚的。 To use TransactionScope class you need to keep two things in mind You need to add System.Transactions reference to your project Make sure the Windows service “Distributed Transaction Coordinator” is up and running. from:http://www.cnblogs.com/hyl8218/archive/2011/10/10/2205576.html

龙生   15 Sep 2016
View Details

EntityFramework之异步、事务及性能优化(九)

前言 本文开始前我将循序渐进先了解下实现EF中的异步,并将重点主要是放在EF中的事务以及性能优化上,希望通过此文能够帮助到你。 异步 既然是异步我们就得知道我们知道在什么情况下需要使用异步编程,当等待一个比较耗时的操作时,可以用异步来释放当前的托管线程而无需等待,从而在管理线程中不需要花费额外的时间,也就是不会阻塞当前线程的运行。 在客户端如:Windows Form以及WPF应用程序中,当执行异步操作时,则当前线程能够保持用户界面持续响应。在服务器端如:ASP.NET应用程序中,执行异步操作可以用来处理多个请求,可以提高服务器的吞吐量等等。 在大部分应用程序中,对于比较耗时的操作用异步来实现可能会有一些改善,但是若你不多加考虑,动不动就用异步反而会得到相反的效果以及对应用程序也是致命的。 鉴于上述描述,我们接下来通过EF实现异步来加深理解。(想想还是把所用类及映射给出来,以免没看过前面的文章的同仁不知所云。) Student(学生)类:

Flower(小红花)类

  相关映射:

接下来我们添加相关数据并实现异步:

接下来就是在控制台进行调用以及输出:

  这段代码不难理解,基于我们对于异步的理解,输出顺序应该是(1)(3)(2)(4),结果如我们预期一样,如下: 我们知道await关键字的作用是: 在线程池中新起一个将被执行的工作线程Task,当要执行IO操作时则会将工作线程归还给线程池,因此await所在的方法不会被阻塞。当此任务完成后将会执行该关键字之后代码! 所以当执行到await关键字时,此时会在线程池中新开一个工作线程Id为11,此时要执行添加数据,所以此时将线程归还给主线程,不阻塞主线程的运行所以就出现先执行(2)而不是先执行(4)。 接下来看一个稍微在上述基础上经过改造的方法。如下:

接下来在控制台中进行如下调用:

  接下我们进行打印如下: 上述至于为什么不是执行【执行异步操作后,当前线程Id为10】然后执行【遍历获得所有学生的姓名,当前线程Id为12】,想必大家能清楚的明白,是执行上述 task.Wait() 的缘故,必须进行等待当前任务执行完再执行主线程后面的输出。 对于处理EF中的异步没有太多去探索的东西,基本就是调用EF中对应的异步方法即可,重点是EF中的事务,请继续往下看: *事务 默认情况下 可能我们未曾注意到,其实在EF的所有版本中,当我们调用SaveChanges方法来执行增、删、改时其操作内部都用一个transaction包裹着。不信,如下图,当添加数据时: 对于上下文中的  ExecuteSqlCommand()  方法默认情况下也是用transaction包裹着命令(Command),其有重载我们可以显示指定执行事务还是不确定执行事务。 在此上两种情况下,事务的隔离级别是数据库提供者认为的默认设置的任何隔离级别,例如在SQL Server上默认是READ COMMITED(读提交)。 EF对于任何查询都不会用transaction来进行包裹。 在EF 6.0版本以上,EF一直保持数据库连接打开,因为要启动一个transaction必须是在数据库连接打开的前提下,同时这也就意味着我们执行多个操作在一个transaction的唯一方式是要么使用 TransactionScope 要么使用  ObjectContext.Connection 属性并且启动调用Open()方法以及BeginTransaction()方法直接返回EntityConnection对象。如果你在底层数据库连接上启动了transaction,再调用API连接数据库可能会失败。 概念 在开始学习事务之前我们先了解两个概念: Database.BeginTransaction() :它是在一个已存在的DbContext上下文中对于我们去启动和完成transactions的一种简单方式,它允许多个操作组合存在在相同的transaction中,所以要么提交要么全部作为一体回滚,同时它也允许我们更加容易的去显示指定transaction的隔离级别。 Dtabase.UseTransaction() :它允许DbContext上下文使用一个在EF实体框架之外启动的transaction。 在相同上下文中组合几个操作到一个transaction Database.BeginTransaction有两种重载——一种是显示指定隔离级别,一种是无参数使用来自于底层数据库提供的默认隔离级别,两种都是返回一个DbContextTransaction对象,该对象提供了事务提交(Commint)以及回滚(RollBack)方法直接表现在底层数据库上的事务提交以及事务回滚上。 DbContextTransaction一旦被提交或者回滚就会被Disposed,所以我们使用它的简单的方式就是使用using(){}语法,当using构造块完成时会自动调用Dispose()方法。 根据上述我们现在通过两个步骤来对学生进行操作,并在同一transaction上提交。如下:

我们通过控制台输出SQL日志查看提交事务成功如下: 【注意】 要开始一个事务必须保持底层数据库连接是打开的,如果数据库不总是打开的我们可以通过 BeginTransaction() 方法将打开数据库连接,如果  DbContextTransaction 打开了数据库,当调用Disposed()方法时将会关闭数据库连接。 注意事项 当用EF上下文中的 Database.ExecuteSqlCommand 方法来对数据库进行如下操作时

  此时将会报错如下: 上述已经讲过此方法会被Transaction包裹着,所以导致出错,但是此方法有重载,我们进行如下设置即可

  将一个已存在的事务添加到上下文中 有时候我们可能需要事务的作用域更加广一点,当然是在同一数据库上但是是在EF之外完全进行操作。基于此,此时我们必须手动打开底层的数据库连接来启动事务,同时通知EF使用我们手动打开的连接来使现有的事务连接在此连接上,这样就达到了使用在EF之外的事务。 为了实现上述在EF之外使用事务我们必须在DbContext上下文中的派生类的构造器中关闭自身的连接而使用我们传入的连接。 第一步 上下文中关闭EF连接使用底层连接。 代码如下:

  第二步 启动Transcation(如果我们想避免默认设置我们可以手动设置隔离级别),通知EF一个已存在的Transaction已经在我们手动的设置的底层连接上启动。 […]

龙生   15 Sep 2016
View Details
1 254 255 256 432