用ADO连接SQLServer数据库,开发平台为VB6.0.
我想用一个事务实现多个表数据插入,如下所示:
            cnn.BeginTrans  'cnn是一个全局的ADO.Connection对象
            If DJInsStr <> "" Then cnn.Execute (DJInsStr)
            If BGInsStr <> "" Then cnn.Execute (BGInsStr)
            If ZBInsStr <> "" Then cnn.Execute (ZBInsStr)
            cnn.CommitTrans
但运行时候,出现错误:
err.Number :-2147467259 
err.Description :不能在手动或分布事务方式下创建新的连接。
插入语句串,没有问题,并且只要我不加事务就没问题...请问是怎么回事,我初学..如果犯了些常识型的错误还请大家别见笑.谢谢了.

解决方案 »

  1.   

    我的连接串为:
    Public Const DB_CONNSTR= "Provider=SQLOLEDB;server=GEO;database=KCCLDB;uid=KCCLDB;pwd=123456"
    全局连接对象Cnn在系统初始化时,打开:
    cnn.open DB_CONNSTR
    然后系统中所有的数据库操作,都是通过cnn.execute(SqlStr)执行。
    请问,我的问题是怎么回事情?
      

  2.   

    你是不是把RecordSet设成行缓冲了(RecordSet.LockType = adLockOptimistic),设成批缓冲试试(RecordSet.LockType = adLockBatchOptimistic)。
      

  3.   

    噢,抱歉,答非所问了。楼主的意思是直接执行SQL-INSERT语句,而不是通过RecordSet插入记录。没经历过这种情况。如果把判断全去掉,直接执行三个语句是什么效果?例如:
    cnn.BeginTrans  
    cnn.Execute (DJInsStr)
    cnn.Execute (BGInsStr)
    cnn.Execute (ZBInsStr)
    cnn.CommitTrans
      

  4.   

    要不然用Command对象试试吧:
    set cmd = new adodb.command
    cmd.ActiveConnection = cnn
    cnn.BeginTrans  
    If DJInsStr <> "" Then cmd.Execute (DJInsStr)
    If BGInsStr <> "" Then cmd.Execute (BGInsStr)
    If ZBInsStr <> "" Then cmd.Execute (ZBInsStr)
    cnn.CommitTrans