部分代码如下:
业务层:(也就是要注册com+服务的dll)using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using TestData;
using System.EnterpriseServices;
using System.Reflection;
using System.Runtime.CompilerServices;[assembly:ApplicationName("ComPlusExample")]
//至于.snk在Assembly.info里面添加了
namespace TestBusiness
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
/// 
[Transaction(TransactionOption.Required)]
public class ClassBusiness:ServicedComponent
{
public Class1 classData;
public ClassBusiness()
{
classData=new Class1(); } [AutoComplete]
public bool RunProc(string commandText)
{
try
{
classData.RunProc(commandText);
classData.CloseCon();
ContextUtil.SetComplete();
}
catch
{
ContextUtil.SetAbort();
}
return true;
} public bool UpdateData(string what,string where,string condition)
{
string commandText="UPDATE "+where+" SET CompanyName ='"+what+"'WHERE CustomerID='"+condition+"'";
this.RunProc(commandText);
return true;
} public bool InsertData(string CID,string ComName)
{
string commandText="Insert Into Customers(CustomerID,CompanyName) VALUES ("+CID+","+ComName+")";
this.RunProc(commandText);  
return true; }

}

}页面调用服务:
private void Button9_Click(object sender, System.EventArgs e)
{
//测试事务能否处理
ClassBusiness business=new ClassBusiness();
                        business.UpdateData("1","customers","1");

}

解决方案 »

  1.   

    应该要有一个默认的公共构造函数

    public ClassBusiness()
    {
    classData=new Class1();
    }
    改成
    public ClassBusiness()
    {
    }
    试试
      

  2.   

    [ClassInterface(ClassInterfaceType.AutoDispatch)]
    [Transaction(TransactionOption.Required )]
      

  3.   


    try
    [Transaction(TransactionOption.Required),ClassInterface(ClassInterfaceType.AutoDual)]
    public class ClassBusiness:ServicedComponent