【问题标题】:How to use one Column of Sql query into another sql query inside C# Code如何在 C# 代码中将一列 Sql 查询用于另一个 sql 查询
【发布时间】:2016-08-07 15:29:18
【问题描述】:

如何在下面的 c# 代码中使用 query1 列 Display Group 到查询 2 中。

我已经用???? 符号表示了我想放置query1 列的位置。

public class PopulateRangeInStore
{

    [Test]
    [Category(TestType.NeedsDeployment)]
    public void PopulateRangeInStores()
    {
        ExecutePopulateRangeInStoreProcedure("csg_sp_populate_RangeInStore");

        using (var connection = IKBDatabaseConnection.GetConnectionForIKBTFS())
        {
            string query1 = "SELECT count (distinct DESC7) FROM ix_spc_planogram (NOLOCK) WHERE dbstatus= 1";
            string query2 = "SELECT count (distinct EquipmentType) FROM Csg_Range_In_Store (NOLOCK) WHERE DisplayGroup = '" + ?????+ "'";
            var command1 = new SqlCommand(query1, connection);
            var command2 = new SqlCommand(query2, connection);
            //string output = " ";
            //var  = " ";
            //var actualDG = " ";
            var actualDG = " ";
            var expectedDG = " ";
            var dataReader1 = command1.ExecuteReader();
            var dataReader2 = command2.ExecuteReader();
            if (dataReader1.Read())
            {
                DataTable dt = new DataTable();
                dt.Load(dataReader1);
                expectedDG = dt.Rows.Count.ToString();
            }

            if (dataReader2.Read())
            {
                DataTable dt = new DataTable();
                dt.Load(dataReader2);
                actualDG = dt.Rows.Count.ToString();
            }
            actualDG.Should().Be(expectedDG);



        }

    }


    private void ExecutePopulateRangeInStoreProcedure(string storedProcedure)
    {
        using (var connection = IKBDatabaseConnection.GetConnectionForIKBTFS())
        {
            using (SqlCommand cmd = new SqlCommand(storedProcedure, connection))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@ix_sys_error", SqlDbType.Int).Value = 0;

                cmd.CommandTimeout = 0;
                cmd.ExecuteNonQuery();
            }
        }
    }





}

【问题讨论】:

  • 我在你的代码中看不到你用“????”表示的地方符号
  • @chameleon86 我刚刚编辑过可以....你现在可以在查询 2 中看到它吗???
  • 1) 尝试像这样进行连接会使您面临 SQL 注入(可能,无论如何)。 2)您正在尝试进行程序化联接,在服务器上进行联接并报告结果几乎总是会更快。 3) 第一个查询输出的唯一列是计数,这几乎不是正确的加入对象。

标签: c# sql asp.net linq ado.net


【解决方案1】:

您可以通过创建一个子查询来代替 ???

string query2 = "SELECT count (distinct EquipmentType) FROM Csg_Range_In_Store (NOLOCK) WHERE DisplayGroup in (" + query2 +")";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多