sqlserver用CLR实现自治事务的问题

ohfox 2012-02-20 04:21:14
我是按照这里的代码操作的
http://blog.csdn.net/xman_78tom/article/details/5912164


能实现自治事务确实没有问题,但是在哪怕单个session循环插入的情况下,都会经常报错:

“在执行用户定义例程或聚合 "ExecuteATStmt" 期间出现 .NET Framework 错误: System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or property cannot be called on Null values. System.Data.SqlTypes.SqlNullValueException: at System.Data.SqlTypes.SqlString.get_Value() at System.Data.SqlTypes.SqlString.op_Explicit(SqlString x) at AutoTran.ExecuteATStmt(SqlString sql, SqlString dbname, SqlInt16 iso) 。”

而且越到后面插入的速度会越来越慢。
简单的插入10000行记录,正常的insert花费17秒就结束了,可是调用上面方法的话,在大概3000多行的时候就插的特别慢,一秒进3,4行的记录,而且还频繁报上面的错误。

请问那个编译成DLL的C#代码,是不是有什么潜在的性能上的bug?
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ohfox 2012-03-04
  • 打赏
  • 举报
回复
说的太对了呵呵
我就是在循环中不停的调用的
有么有什么法子让调用完毕,与dll之间的会话直接over呢?
连接池不能在dll里面搞吧?
郗晓勇 2012-02-20
  • 打赏
  • 举报
回复
猜想啊
楼主是不是循环调用了博客当中的那个dll了?
如果是的话那么就很明显了,每次调用就建立会话,而且没有建立连接池调用的多了会话多了自然就会慢下来。
楼主可以尝试加上连接池试试
希望对你有帮助。
=========================================================================================

ohfox 2012-02-20
  • 打赏
  • 举报
回复
噢^_^
这些都没有
简单的说,我其实就是往表里面insert语句,只不过用的那个DLL里面的
EXEC ExecuteATStmt @stmt = @b_sql
这样的方法,在循环插入的时候,有明显的性能问题
老猫五号 2012-02-20
  • 打赏
  • 举报
回复
比如说存储过程的返回值、变量未赋值、传递的参数为空、对不能为空的字段赋null值等。
ohfox 2012-02-20
  • 打赏
  • 举报
回复
能具体说说么?
在哪里判断什么的NULL值?
我只是简单的往一个表里面insert记录,照理说NULL不应该影响到啊。
老猫五号 2012-02-20
  • 打赏
  • 举报
回复
正常情况下不应该有这个问题,你检查一下是否没有判断null值了。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧