C# SqlCommand参数不工作

C# SqlCommand参数不工作,c#,C#,任务: 用必需的数据替换sql语句中的某些变量 问题: 变量没有被替换 C代码: SqlCommand cmd = new SqlCommand(@" select 1 [GL], ( select isnull(COUNT(*), 0) from

任务:

用必需的数据替换sql语句中的某些变量

问题:

变量没有被替换

C代码:

SqlCommand cmd = new SqlCommand(@"
     select 
                 1 [GL], 
                 (
                     select 
                             isnull(COUNT(*), 0)
                         from 
                             @DataDB..APSetup
                 ) [AP],
                 (
                     select 
                             isnull(COUNT(*), 0)
                         from
                             @DataDB..ARSetup
                 ) [AR],
                 (
                     select 
                             isnull(COUNT(*), 0)
                         from 
                             @DataDB..CASetup
                 ) [CA],
                 case 
                     when (
                          select 
                                  isnull(COUNT(*), 0) 
                              from
                                  @DataDB..SalesTax
                          ) > 0 
                         then 1 else 0
                 end [TX], 
                 (
                     select 
                             isnull(COUNT(*), 0)
                         from
                             @DataDB..INSetup
                 ) [IN], 
                 (
                     select
                             isnull(COUNT(*), 0)
                         from 
                             @DataDB..POSetup
                 ) [PO],
                 (
                     select
                             isnull(COUNT(*), 0)
                         from 
                             @DataDB..SOSetup
                 ) [SO], 
                 (
                     select 
                             isnull(COUNT(*), 0)
                         from
                             @DataDB..RQSetup
                 ) [RQ],
                 (
                    select 
                             COUNT(*)
                        from 
                             @DataDB..pcsetup 
                        Where 
                             Setupid = 'PC' AND PERNBR <> ''
                 ) [PJ] 
    from 
          @DataDB..glsetup");

    cmd.Parameters.AddWithValue("@DataDB", CurrentBranch.AppDB);
    AppConnection.InitialCatalog = CurrentBranch.AppDB;
    Modules.AddRange(SqlQueries.DataQuery2(cmd, AppConnection.ConnectionString)); 
Sql查询:

select 1 [GL], (select isnull(COUNT(*),0) from @DataDB..APSetup) [AP], (select isnull(COUNT(*),0) from @DataDB..ARSetup) [AR], (select isnull(COUNT(*),0) from @DataDB..CASetup) [CA], case when (select isnull(COUNT(*),0) from @DataDB..SalesTax) > 0 then 1 else 0 end [TX], (select isnull(COUNT(*),0) from @DataDB..INSetup) [IN], (select isnull(COUNT(*),0) from @DataDB..POSetup) [PO], (select isnull(COUNT(*),0) from @DataDB..SOSetup) [SO], (select isnull(COUNT(*),0) from @DataDB..RQSetup) [RQ],  (select COUNT(*) from @DataDB..pcsetup Where Setupid = 'PC' AND PERNBR <> '') [PJ] from @DataDB..glsetup
问题:

为什么变量替换不起作用

其他信息:

问题不是查询,当我手动将@DataDB替换为其预期值时,它工作正常


问题是C SqlCommand.Parameters.AddWithValue

原因是您无法参数化要从中选择的数据库/表。你不能这样做:从@SomeTable中选择*你已经在C中这样做了,只需这样做:

为了清晰起见,剪掉了:

string sql = string.Format("select isnull(COUNT(*),0) from {0}..APSetup)...", CurrentBranch.AppDB);

顺便说一句,阅读你的sql查询真让我眼花缭乱..请尝试清理你的sql命令,这不是很可读。。谢谢那是什么?还有,我没有写sql查询,我们有一个人负责这个问题。问题不是查询,问题是标量变量没有被替换。在找到指针之前,对草堆进行排序。最后,有人读了这个问题@jvanh1通过使问题更具可读性来解释答案。@jvanh1因为所有表都在同一个数据库中,为什么不在您的连接上设置数据库(可能已经是这种情况)并省略所有数据库名称前缀?这将使您的工作更简单,查询更短、更可读、更可维护等等……因为我们循环通过一系列动态数据库,这些数据库从一次运行到下一次运行,连接也会动态更改,正如我之前所述,我无法控制sql命令的执行方式written@jvanh1,事实上,您明确地设置了数据库AppConnection.InitialCatalog=CurrentBranch.AppDB;您不需要在语句中指定。