声明后,Sql连接目录更改

时间:2012-10-30 15:07:24

标签: c# sql

问题:

在数据库上运行带有SqlCommand()的Sql命令,然后将数据插入另一个数据库后,所有后续语句都出错,并显示ExceptionInvalid对象名。

问题:

为什么会这样?

其他信息:

我知道如何通过在select部分的表之前添加Temp数据库名称来修复它,但是因为它在该数据库的上下文中运行而不是必需的,而不是在我单独运行语句时SQL管理工作室

程序逻辑:

  1. 创建并填充临时数据库(所有表ASI _...)
  2. 在临时数据库选择数据的上下文中,然后将其插入另一个数据库(@AcuDB)
  3. 对X查询重复步骤2
  4. 广告代码:

    if (TempD.State == System.Data.ConnectionState.Closed) TempD.Open();
                                Command = new SqlCommand(temp, TempD);
                                Command.CommandTimeout = 0;
                                Command.ExecuteNonQuery(); 
    

    在先前类似语句之后运行示例Sql错误:

      

    插入@ AcuDB..Batch(CompanyID,BranchID,   模块,BatchNbr,CreditTotal,DebitTotal,ControlTotal,CuryCreditTotal,CuryDebitTotal,CuryControlTotal,CuryInfoID,LedgerID,BatchType,状态,自动翻转,AutoReverseCopy,OrigModule,OrigBatchNbr,DateEntered,发布,张贴,LineCntr,CuryID,ScheduleID,NoteID,接下来CreatedByID,CreatedByScreenID, CreatedDateTime,LastModifiedByID,LastModifiedByScreenID,LastModifiedDateTime,保持,说明,计划,作废,FinPeriodID,TranPeriodID)   选择2,   1,模块,BatchNbr,CreditTotal,DebitTotal,ControlTotal,CuryCreditTotal,CuryDebitTotal,CuryControlTotal,i.CuryInfoID,   isnull((从@ AcuDB中选择a.LedgerID,其中a.LedgerCD =。)   b.LedgerID),0)   [LedgerID],BatchType,状态,自动翻转,AutoReverseCopy,OrigModule,OrigBatchNbr,   DateEntered   [DateEntered],发布,张贴,LineCntr,b.CuryID,ScheduleID,NoteID,接下来   'B5344897-037E-4D58-B5C3-1BDFD0F47BF9'[CreatedByID],'00000000'   [CreatedByScreenID],GETDATE()[CreatedDateTime],   'B5344897-037E-4D58-B5C3-1BDFD0F47BF9'[LastModifiedByID],'00000000'   [LastModifiedByScreenID],GETDATE()   [LastModifiedDateTime],保持,说明,预设,有空隙,b.FinPeriodID,TranPeriodID   来自Temp..ASI_GLBatch b内部联接@ AcuDB..CurrencyInfo我   i.CuryEffDate = b.DateEntered交叉加入@AcuDB..glsetup g where   b.companyID = @CpnyCD和b.branchID = @BranchCD

1 个答案:

答案 0 :(得分:0)

跨越这样的数据库总是不稳定的,因为SQL会试图暗示上下文。在这种情况下,除非@AcuDB包含包含数据库和架构的完全限定地址,否则由于您切换上下文的方式而导致错误。获取@AcuDB包含的内容的读数,并尝试在存储过程中运行批处理。如果必须,设置一个单独的实例来沙箱。 C#的结束将继续使事情变得复杂,直到你把它切掉一点并确保你的SQL是好的。在您确定没问题之后,将其重新集成到C#代码中并从那里开始工作。