最新评论

共18页: 1 2 3 4 5 6 7 8 9 下一页 末页 
John Liu 2011-12-23 17:36
不想吵架,只想纯粹探讨下技术问题。 个人觉得ORM和存储过程肯定各有各的用武之地。相对来讲,业务逻辑简单的比如简单的增删改差的操作用ORM应该好点。但涉及稍复杂一些的业务逻辑,需要进行比较复杂的事务处理的时候,存储过程可能更适合。 就楼主所说,一旦需求变化,数据库表,字段等发生变化,使用存储过程的话修改起来复杂。这个观点不敢苟同。当业务需求发生变化而我们又没有预计到这个变化的时候,修改是不可避免的。使用存储过程方式固然需要修改相应的存储过程代码。但使用ORM方式,难道不是同样要在数据库中做字段处理,而且还要在程序中代码做修改。当你的网站需要部署在多个站点的时候,究竟哪个改动大?
tiandong 2011-12-23 01:26
/// <summary> /// 执行操作,无返回 OK /// </summary> /// <param name="dbkey">数据库ID</param> /// <param name="Procedure">存储过程</param> /// <param name="prams">参数数组</param> /// <returns></returns> public override int ExecuteBatchNonOuerySp(string dbkey, string Procedure, object[][] prams) { System.Data.SqlClient.SqlConnection con = null; System.Data.SqlClient.SqlCommand cmd = null; System.Data.SqlClient.SqlTransaction trans = null; int tmp = 0, num = 0, length = 0, length02 = 0; try { length = prams.Length; con = GetConn(dbkey); cmd = GetCmd(dbkey); trans = con.BeginTransaction(); } catch (System.Exception ex1) { throw ex1; } // 执行 try { //cmd = new System.Data.SqlClient.SqlCommand(Procedure, con); cmd.Connection = con; cmd.CommandText = Procedure; cmd.CommandType = System.Data.CommandType.StoredProcedure; //存储过程执行方式 cmd.Transaction = trans; System.Data.SqlClient.SqlCommandBuilder.DeriveParameters(cmd); for (int i = 0; i < length; i++) { if (prams[i] != null && prams[i].Length > 0) { length02 = prams[i].Length; for (int j = 0; j < length02; j++) { cmd.Parameters[j + 1].Value = prams[i][j]; } tmp = cmd.ExecuteNonQuery(); if (tmp > 0) { num += tmp; } if (num == 50) { num = 50; } } } trans.Commit(); } catch (System.Exception ex2) { trans.Rollback(); throw ex2; } finally { trans.Dispose(); } return num; }
tiandong 2011-12-23 01:26
3、代码如下: public class MssqlDataBase : BaseDataBase { private static object flag = 0; private static Dictionary<string, System.Data.SqlClient.SqlConnection> conlist = null; private static Dictionary<string, System.Data.SqlClient.SqlCommand> cmdlist = null; public override void Dispose() { string[] dbkeys = null; if (conlist != null && conlist.Count > 0) { dbkeys = conlist.Keys.ToArray<string>(); foreach(string dbkey in dbkeys) { conlist[dbkey].Close(); conlist[dbkey].Dispose(); } conlist = null; } if (cmdlist != null && cmdlist.Count > 0) { dbkeys = cmdlist.Keys.ToArray<string>(); foreach(string dbkey in dbkeys) { cmdlist[dbkey].Dispose(); } cmdlist = null; } if (tranlist != null && tranlist.Count > 0) { dbkeys = tranlist.Keys.ToArray<string>(); foreach (string dbkey in dbkeys) { tranlist[dbkey].Dispose(); } tranlist = null; } } public MssqlDataBase() { lock (flag) { if (conlist == null) { conlist = new Dictionary<string, System.Data.SqlClient.SqlConnection>(); cmdlist = new Dictionary<string, System.Data.SqlClient.SqlCommand>(); } } } private static System.Data.SqlClient.SqlConnection GetConn(string dbkey) { System.Data.SqlClient.SqlConnection con = null; dbkey = dbkey.Trim().ToLower(); if (!conlist.ContainsKey(dbkey)) { con = new System.Data.SqlClient.SqlConnection(dbkey); con.Open(); conlist.Add(dbkey, con); } else { con = conlist[dbkey]; } return con; } public static System.Data.SqlClient.SqlCommand GetCmd(string dbkey) { System.Data.SqlClient.SqlCommand cmd = null; dbkey = dbkey.Trim().ToLower(); if (!cmdlist.ContainsKey(dbkey)) { cmd = new System.Data.SqlClient.SqlCommand(); cmdlist.Add(dbkey, cmd); } else { cmd = cmdlist[dbkey]; } return cmd; }
tiandong 2011-12-23 01:25
1、问题描述: 以下代码,在插入100,0000笔23个栏位的IIS日志记录时候, 测试结果显示:执行时间为4.6秒,客户端CPU和内存占用分别为10%和25MB; 但是,MSSQL 2008 R2服务器上显示数据库进程使用内存最后达到898MB无法释放;[b]但是我的程式中最后Disponse()释放资源的执行,没有在服务器上释放SQL内存资源,这个是为什么?有办法解决吗?谢谢。[/b] 2、系统环境: 服务器:WINDOWS 2003 SERVER + MSSQL SERVER 2008 R2 EnterPrise 客户端:WINDOWS 2003 SERVER + VISUAL STUDIO 2008
(张超) 2011-12-22 11:27
我猜测是 没有乱吧
(张超) 2011-12-22 11:25
这个算法的最坏情况是什么?
skhung 2011-11-07 14:34
Thanks a lot! Mindmanager 2010 也有同樣的問題, 使用大師您的方法也可以解決!
sd02b0825 2011-10-24 11:54
用SqlBulkCopy试了一下导入2000条数据,结果每一次都比我用循环拼接select... union慢
hao_2468 2011-10-21 17:43
最近一直在用SqlBulkCopy,非常好用,就是有时一次性处理数据较多的时候,会报连接超时的问题。虽然微软提供了补丁,说可以解决这个问题,但是客户的服务器就是不让装,只能把数据分批处理了。
深山老林 2011-10-10 15:12
@Drek 可以参考: http://www.cnblogs.com/taven/archive/2010/01/13/1646244.html
Drek 2011-10-10 14:48
请教下 iis6如何发布和部署呢。本机调试是OK,一发布就找不到页面。报404错误。iis7当然没问题,可惜公司服务器是iis6的
hymer 2011-09-14 21:57
非常感谢!
SIMON_YAO 2011-08-25 14:36
mssql 2005 "Create Type PassportTableType as Table" 报错哦
乐章 2011-08-10 15:55
我也写了一个类似的验证类 http://www.cnblogs.com/ark/archive/2011/08/09/2132597.html
火星大能猫 2011-07-26 15:09
我也如此[quote]不若相忘于江湖: 如果出错了不记录的话... 那程序崩溃时,,, 你怎么排错. [/quote] 我也这么认为.
深山老林 2011-07-12 21:30
首先,我很难想象到什么场景中涉及到批量插入这么多条数据,如果因为超时导致了错误,只能说明选用SQLServer数据库是一种不明智的选择。
zqwuwei 2011-07-12 17:44
[quote]深山老林:这个的确也是一种解决问题的办法,不过存在这样的问题,多数是设计问题导致的。[/quote] 具体是什么设计问题?
深山老林 2011-07-12 10:18
这个的确也是一种解决问题的办法,不过存在这样的问题,多数是设计问题导致的。
zqwuwei 2011-07-12 09:57
把这个属性设置下SqlBulkCopy.BulkCopyTimeout
深山老林 2011-06-07 07:23
虚拟机的话简单使用桥接就可以了,环境配置可以去网上搜索教材。
羽纷飞 2011-06-06 20:14
很纠结,虚拟机环境都没搭好,更别提镜像备份了。博主有关于虚拟机方面的教程或文档么?
suijin 2011-04-06 21:51
谢谢了 大师,我用win7刚刚解决,特地注册表示感谢!
狼来了 2011-02-24 09:13
支持!感谢!
awei20081 2011-02-10 10:11
http://www.bsdown.com/ask/d/1010/36587.html这个更直接些
chenyizh 2010-12-22 00:57
谢谢了
深山老林 2010-12-15 20:08
@夜泪痕 什么模板?
夜泪痕 2010-12-15 19:50
[b]请问,可以下载这个模板吗?[/b]
夜泪痕 2010-12-15 19:47
非常感谢!...
高导 2010-12-13 16:24
不能下载呀。
Ryan_j 2010-11-02 10:18
谢谢 ! 问题 解决…
深山老林 2010-10-23 13:28
@Ryan_j Mindjet MindManager 9
Ryan_j 2010-10-23 01:13
这个画图的软件是什么?谢谢!
lxwwqw 2010-10-14 23:24
太好了,今天刚好遇到这个问题,其实以前8.0的时候有有碰到了,但是后来用了不同的破解版本后,貌似也能用,就不了了之了。 前些日子安装好了9以后,今天用模板的时候又遇到这个Bug,郁闷中想转到OneNote上去了。 现在问题解决啦,谢谢。
深山老林 2010-09-17 21:11
没有抄,都是自己写的。 路径可能不一样,但是差不多都在那个位置。
麦克刘.Mr 2010-09-17 10:28
大哥咱不抄网络上的行么? 我找了半天也没找到那几个模板文件在那儿! 我XP操作系统
深山老林 2010-09-14 21:52
@nyth 文章中没有提到这个东东。
nyth 2010-09-14 18:44
new CategoryRouteHandler() 在哪里定义的。
深山老林 2010-09-14 16:55
@空呵 可以在MVC项目中添加WebForm页面,编程方式跟原有的方式没有区别,不过最后要在路由表中进行配置。
空呵 2010-09-14 15:46
我想了解,怎样在一个项目中混合使用MVC与传统的asp.net?
NewSea. 2010-08-08 09:15
项目中的所有Ajax,都必须基于Post已成为一种规范,看来,MS也推行这种规范,目前还没有遇到过这个问题。 按规范来吧。
chasefornone 2010-07-09 10:19
受教了,学习中,谢谢楼主详细的讲解!!!
深山老林 2010-06-28 11:36
@温景良(Jason) 互联网项目为了提高并发性,一般都是通过存储过程中使用NOLOCK、READPAST关键字来解决。并发性的提高都是牺牲了其它方面的特性。 看项目的具体对数据的出错需要什么级别,然后考虑具体的提高并发性的办法。这个必须得具体问题具体分析。 至于ado.net是否可以使用这两个关键字,答案是可以的。
温景良(Jason) 2010-06-28 11:29
[quote]深山老林: @温景良(Jason) 开放式并发处理打开以后会进行并发冲突检测,并且提示用户是否继续进行操作。 如果开启事务,就会锁表,锁表的话,就无法操作,自然不会冲突。 如果是互联网项目,要进行高并发的读取的话,推荐还是在存储过程中使用NOLOCK、READPAST关键字。区别就在于: NOLOCK 可能把没有提交事务的数据也显示出来. READPAST 会把被锁住的行不显示出来  [/quote] 在企业管理系统中(MIS),采用并发冲突检测好,还是事务呢,在存储过程去控制把没有提交的数据显示出来好像不是很好,因为会有脏数据,不过READPAST 这个可以,ado.net有提供这个功能吗,之前就经常碰到被锁了,然后客户操作不了,就超时了,一直找不到很理想的解决办法
深山老林 2010-06-27 08:35
@温景良(Jason) 开放式并发处理打开以后会进行并发冲突检测,并且提示用户是否继续进行操作。 如果开启事务,就会锁表,锁表的话,就无法操作,自然不会冲突。 如果是互联网项目,要进行高并发的读取的话,推荐还是在存储过程中使用NOLOCK、READPAST关键字。区别就在于: NOLOCK 可能把没有提交事务的数据也显示出来. READPAST 会把被锁住的行不显示出来 
温景良(Jason) 2010-06-27 08:26
谢谢你告诉我怎么设置开放式并发处理,但是我想问下,如果开启的话,会有什么好处和坏处,对事务操作有影响吗
深山老林 2010-06-27 07:34
@温景良(Jason) 谢我什么?
温景良(Jason) 2010-06-26 23:32
谢谢
共18页: 1 2 3 4 5 6 7 8 9 下一页 末页 

公告

英文名:Kevin

位置:中国 北京

职位:技术总监

Email:iamwlb@qq.com

昵称:深山老林
园龄:4年1个月
粉丝:92
关注:4