问题:
在数据库上运行带有SqlCommand()的Sql命令,然后将数据插入另一个数据库后,所有后续语句都出错,并显示ExceptionInvalid对象名。
问题:
为什么会这样?
其他信息:
我知道如何通过在select部分的表之前添加Temp数据库名称来修复它,但是因为它在该数据库的上下文中运行而不是必需的,而不是在我单独运行语句时SQL管理工作室
程序逻辑:
广告代码:
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
答案 0 :(得分:0)
跨越这样的数据库总是不稳定的,因为SQL会试图暗示上下文。在这种情况下,除非@AcuDB
包含包含数据库和架构的完全限定地址,否则由于您切换上下文的方式而导致错误。获取@AcuDB
包含的内容的读数,并尝试在存储过程中运行批处理。如果必须,设置一个单独的实例来沙箱。 C#的结束将继续使事情变得复杂,直到你把它切掉一点并确保你的SQL是好的。在您确定没问题之后,将其重新集成到C#代码中并从那里开始工作。