在将 varchar 值 ‘10.00’ 转换成数据类型 int 时失败。

在我们项目中有没有遇到这么个要求?做一个导入Excel功能,里面有数量列,系统中是int类型,用户上传的Excel中不一定是什么类型,假如用户是传了文本类型的带小数数字,需要直接insert,则会报标题中的错误。但用户“理所应当”的说:“不是我的问题!”,这时候应该怎么办?

强转? cast(i.stock_count as int)、convert(int, i.stock_count) ? 可能并不起作用……

截取字符串?鬼知道用户会传什么类型的数字进来…………

要么就在真正导入前在代码中做细致判断,要么图省事使用“floor(i.stock_count)”。

floor函数(向下取整)是无论小数点后面是什么,都只保留当前整数。简单,方便~

.NET 事务处理 transactionscope “此操作对该事务的状态无效” 、”已中止事务” 错误

在.Net中使用TransactionScope 可以对括进去的代码进行事务处理,使用方法如下。

using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
{
   //代码逻辑
}

如果在里面的代码出现异常(即便含有try..catch.异常捕获),则会在代码最后的“}”处触发“已中止事务”的异常,不调试的话前台返回的就是这个异常,如下图:

这时候需要断点调试里面的代码,看看是否有异常。

如果遇到“此操作对该事务的状态无效”错误,一般断点调试不会准确命中问题语句,我遇到的例子是在conn.Open()触发的异常,这打开数据库连接一般不可能会有错误,通过网上寻找也几乎没有问题的解答,后来自己研究,我总结了会有以下可能:

1、MSDTC服务开启中,但有问题,尝试重启(net start msdtc)

2、可能是处理时间过长导致超时,设置超时时长。new TransactionScope(TransactionScopeOption.Required, 600000)

3、平常没问题极少数遇到时,考虑是否有重复数据。一个事务中对同一条数据进行了多次处理,在第二次处理的时候会报错。或有多个一样的数据进行了处理。(如果是先select然后for循环的处理且平常不报错,一般是这种情况)

Ubuntu上的Apache2的PHP修改上传文件大小限制

现在从网上搜apache上传文件限制大小会出现很多版本,修改的参数无疑是php.ini文件中的upload_max_filesize = 200M,但php.ini文件的具体位置都各有说辞。

针对Apache2+PHP7.3的环境,php.ini文件位置在:/etc/php/7.3/apache2/php.ini。
Apache2+PHP5,则为:/etc/php5/apache2/php.ini。
Apache2环境除了php.ini不需要更改其他文件(像有些地方说需要改httpd.conf之类的,除非系统版本过于老旧,理论上现在的系统环境没有这个文件)

修改完成后执行service apache2 restart

如果修改不管用则尝试寻找下面文件并修改:
/etc/php/7.3/fpm/php.ini、/etc/php.d/cgi/php.ini

文件内改参数为:memory_limit、post_max_size、upload_max_filesize

Ubuntu上快速安装PHP7.x

原文:https://tecadmin.net/install-php-7-on-ubuntu/

如下命令依次执行,下面的例子是安装php7.3版本,7.3可以更改为7.0、7.1、7.2来安装不同的版本。

执行2、3行时可能会遇到提示不安全或错误,提问“安装时是否跳过验证”时选Y,一般安全警告则无视即可。

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php7.3

完成后使用:php -v 查看php是否安装成功并版本。
附php一般扩展安装项:

apt-get install php7.3-fpm php7.3-mysql php7.3-curl php7.3-json php7.3-cgi php7.3-xml

SQL Server 的索引视图(物化视图)

今天遇到一个需求,需要将现有的普通视图进行性能优化,首当其冲的我想到了Oracle的物化视图,讲真好用,但问题是SQL Server好像没有这个玩意,经过网上的搜索SQL Server可以建立带索引的视图,于是我进行了尝试。

首先索引视图的写法,就是在普通建视图后面增加 with schemabinding 标记,用途是将该视图绑定到数据库架构上。

create view [V_viewname] with schemabinding
as
....

这样建视图需要注意的事项:

1、select语句中所有的表名必须使用“dbo.表名”来写。

2、select语句中不能带有*号。(也就是不能select * from dbo.table)

3、语句中不允许有跨库的表查询。

如语句中有上述情况则执行时会遇下面的错误。

消息 4512,级别 16,状态 3,过程 V_产品配送,第 4 行
无法将 视图’dbo.V_产品配送’ 绑定到架构,因为名称 ‘Sales.dbo.Task’ 对于架构绑定无效。名称必须由两部分构成,并且对象不能引用自身。

最后就给对应的视图加入索引了。用SQL管理器按下图添加或者自行写create index语句。

对于大数据表会有一些效果,不过最根本的还是多花些时间处理SQL本身性能。