C# SqlCommand参数不工作
任务: 用必需的数据替换sql语句中的某些变量 问题: 变量没有被替换 C代码:C# SqlCommand参数不工作,c#,C#,任务: 用必需的数据替换sql语句中的某些变量 问题: 变量没有被替换 C代码: SqlCommand cmd = new SqlCommand(@" select 1 [GL], ( select isnull(COUNT(*), 0) from
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;您不需要在语句中指定。