【问题标题】:c#.Net: Execute two SQL statements at a timec#.Net:一次执行两条 SQL 语句
【发布时间】:2014-05-23 09:23:55
【问题描述】:

我想知道是否有任何方法可以执行多个 SQL 语句。就像我想获得计数和价值一样。如何在 c# 中做到这一点?

查询 1:

cmd = new SqlCommand("select count(*) from tblStock where prodName=@prodName", con); // to get count

查询 2:

cmd = new SqlCommand("select quantity from tblStock where prodName=@prodName", con);// to get qty

int count, qty;

        try
        {
            con.Open();
            count = (Int32)cmd.ExecuteScalar(); //returns null if doesnt exist
            qty = (Int32)cmd.ExecuteScalar();

        }

有可能吗?

【问题讨论】:

  • 为什么不一一执行呢?
  • 没有优化的代码来实现这个吗?
  • 这是您应用程序的瓶颈吗?否则,将代码复杂化以优化它是不明智的。

标签: c# sql-server select


【解决方案1】:

你不能只在一个选择查询中选择两个值吗?

cmd = new SqlCommand("select quantity, count(*) from tblStock where prodName=@prodName", con);

【讨论】:

  • 然后如何将结果保存在两个不同的变量中? qtycount?
  • 您需要通过ExecuteReader 使用SqlDataReader。用法示例见此处:msdn.microsoft.com/en-us/library/9kcbe65k.aspx
  • 另请参见此处您可以看到用于获取列值的索引:msdn.microsoft.com/en-us/library/…
  • 此查询将失败,因为您没有按数量分组。
  • 我的意思是编写一个同时获取两个值的查询,而不是执行两个。 OP 可以让查询做正确的事情,前提是知道架构。
【解决方案2】:

这没有意义。

如果 tblStock 中每个 prodName 有不止一行,那么返回不是标量而是值数组的“数量”有什么用?

如果 tblStock 中每个 prodName 只有一行,那么要求 count(*) 始终为 1 有什么用?

您要么需要数量的合计值(也许是“sum(quantity)”),要么不需要 count(*),因为只有一行。

我假设它是前者,在这种情况下你的 SQL 查询是

select sum(quantity) as sumQty, count(*) as ct from tblStock where prodname = @prodName

【讨论】:

    【解决方案3】:

    你可以使用 SqlDataReader 使用语句

    cmd = new SqlCommand(select sum(quantity) QTY, count(*) from tblStock where prodName=@prodName);
    
    SqlDataReader dr =cmd.ExecuteReader(CommandBehavior.SingleRow);
    
    var Q=dr[0];
    var C=dr[1];
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2012-01-11
      • 1970-01-01
      • 2023-02-09
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多