小编Jak*_*ter的帖子

LINQ-to-SQL .ExecuteCommand()不适用于参数化对象名称

我对此感到有点沮丧,并希望有人能澄清发生了什么.

我想使用我的LINQ-to-SQL数据上下文以编程方式禁用外键约束.看起来这应该像以下一样简单:

context.ExecuteCommand( "ALTER TABLE {0} NOCHECK CONSTRAINT {1}", "MyTable", "FK_MyTable_MyOtherTable" );

不幸的是,这段代码因SQL错误"@ p0'附近的语法不正确"而遭到轰炸.

当我启动分析器时,我发现生成的SQL是:

exec sp_executesql 
N'ALTER TABLE @p0 NOCHECK CONSTRAINT @p1',
N'@p0 varchar(4000),@p1 varchar(4000)',
@p0=N'MyTable',
@p1=N'FK_MyTable_MyOtherTable'
Run Code Online (Sandbox Code Playgroud)

从我在SQL Books Online和LINQ-to-SQL文档中可以找到的所有内容中,这应该可行.

我改用了这个:

context.ExecuteCommand( String.Format( "ALTER TABLE {0} NOCHECK CONSTRAINT {1}", "MyTable", "FK_MyTable_MyOtherTable" ) );

它有效,但它有点失败了能够将参数传递给.ExecuteCommand()的目的.

那么这在LINQ-to-SQL,SQL Server中是一种什么样的怪癖,还是我真的很困惑?

任何见解将不胜感激!

.net c# t-sql sql-server-2008 linq-to-sql

4
推荐指数
1
解决办法
3760
查看次数

Trace.WriteLine无法在使用CSharpCodeProvider编译的动态加载程序集中工作

有没有人有任何见解,为什么在动态加载(使用Assembly.CreateInstance)程序集内部调用Trace调用时不会产生输出?奇怪的是,Debug.WriteLine在程序集内工作正常,并且正在进行动态加载的程序集内的Trace调用也可以正常工作.我已经确认Trace.Listeners包含正确的侦听器对象(与Debug.Listeners相同)但是对Trace的调用只是不生成任何输出.

这对我来说是一个巨大的诊断问题,因为我的整个应用程序都是通过自定义TraceListener进行日志记录.

更新:(从下面的评论)我正在使用CSharpCodeProvider动态构建程序集,但我没有/d:TRACE在CompilerParameters.CompilerOptions中提供开关.因此,TRACE没有在程序集中定义,我对Trace的调用基本上被忽略了.另外值得一提的是,我设置CompilerParameters.IncludeDebugInformation = true这可以解释为什么我正在调试,即使我没有明确设定/d:DEBUGCompilerParameters.CompilerOptions.这只是猜测 - 在MSDN文档中没有任何内容表明这是真的.

这里的底线是,当使用CSharpCodeProvider动态编译源时,任何特定于程序集的内容都取决于您明确定义.

.net c# dll .net-assembly

4
推荐指数
1
解决办法
980
查看次数

标签 统计

.net ×2

c# ×2

.net-assembly ×1

dll ×1

linq-to-sql ×1

sql-server-2008 ×1

t-sql ×1