ADO.NET使用事务出错的解决(MSDTC) <转>
原因一:没有打开MSDTC服务
步骤:
- Componet Services-->右击My Computer--->Start MSDTC
- Componet Services-->右击My Computer-->属性--->MSDTC-->安全配置--->勾选上我红线标注的部分。
原因二: 防火墙阻止
解决方法,添加135端口到Exception
原因三:使用了多个连接
1: using (TransactionScope ts = new TransactionScope())
2: {
3: //...
4: ts.complete();
5: }
TransactionScope不允许一个事务里有多个连接,解决办法是我们加个基础类,让所有的都是用同一个连接
1: public class BaseDataAccess
2: {
3: private SqlConnection mSqlconnection;
4: protected SqlConnection sqlConnection
5: {
6: get
7: {
8: if (mSqlconnection == null) mSqlconnection = new SqlConnection(SqlHelper.mConnectionString);
9: return mSqlconnection;
10: }
11: }
12: }
ADO.NET 2.的一个新特征多数据结果集(Multiple Active Result Sets,简称MARS)-它允许在单个连接上执行多重的数据库查询或存储过程。这样的结果是,你能够在单个连接上得到和管理多个、仅向前引用的、只读的结果集。目前实现这个功能的数据库只有Sql Server 2005。所以当我们针对Sql Sever 2005的时候,需要重新审视DataReader对象的使用。使用SqlServer 2005,可以在一个Command对象上同时打开多个DataReader,节约数据库联接所耗费的服务器资源,在实际开发中普遍存在的一种典型的从数据库中读写数据的情形是,你可以使用多重连接而现在只用一个连接就足够了。例如,如果你有一些来自于几个表中的数据-它们不能被联结到一个查询中,那么你就会有多重的连接-每个连接都有一个与之相关连的命令用于读取数据。同样,如果你正在向一个表写数据,那么你需要另外一个连接或连接集合-如果有多个表要被更新的话。
例如下面的代码
1: //MultipleActiveResultSets=true打开联接
2: string connstr = "server=(local);database=northwind;integrated security=true;MultipleActiveResultSets=true";
3: SqlConnection conn = new SqlConnection(connstr);
4: conn.Open();
5: SqlCommand cmd1 = new SqlCommand("select * from customers", conn);
6: SqlCommand cmd2 = new SqlCommand("select * from orders", conn);
7: SqlDataReader rdr1 = cmd1.ExecuteReader();
8: // next statement causes an error prior to SQL Server 2005
9: SqlDataReader rdr2 = cmd2.ExecuteReader();
10: // now you can reader from rdr1 and rdr2 at the same time.
11: conn.Close();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?