查询数据库并输出结果以在 C# 中构建 IN 语句

Posted

技术标签:

【中文标题】查询数据库并输出结果以在 C# 中构建 IN 语句【英文标题】:Query a database and output result to build IN statement in C# 【发布时间】:2020-12-17 18:38:35 【问题描述】:

我在 C# 中有一个查询,我正在我的服务器上执行它。它返回一列,但我想获取该列的结果并将它们生成到 IN 语句中,以传递到另一台服务器的另一个查询。

代码如下,就是不知道输出每一行的逻辑怎么写:

            System.Data.DataTable dtCups = new System.Data.DataTable();
            var dataSet = new DataSet();

            string connString = "Data Source=My Server;" + "Integrated Security=SSPI;";

            SqlConnection Conn = new SqlConnection(connString);
            Conn.Open();
            
            String qryCups = "select cups from table"; //returns 300 rows

            SqlDataAdapter adapter = new SqlDataAdapter(qryCups, Conn);
            adapter.Fill(dtCups);
            Conn.Close();
 
            foreach (DataRow dr in dtCups.Rows)
            
                string cups = dr.ItemArray[0].ToString();
                DataRow[] MatchRecs = dtCups.Select("cups='" + dr.ItemArray[0] + "'");

            

只是不确定要做什么,因为它正在循环遍历每条记录,但不将先前的杯子值附加到下一个值,例如“cup1”、“cup2”等。

提前致谢。

下一个 sql 语句的代码是

String qryFinal = "select cups from table_B where cups in '" + [the output of the data above] + "'";

然后我会将结果插入到最终表格中或放到 Excel 中(我知道该怎么做);

【问题讨论】:

请在 IN 语句中为以下查询添加应使用这些值的代码。 啊,是的,SQL 注入 谢谢史蒂夫,我添加了它。它基本上只是另一个选择的 in 语句,但我需要将第一个查询存储在一个变量中,以便我可以通过它。 【参考方案1】:

您应该阅读您的表格并逐行创建两个列表。第一个将包含参数名称,第二个将包含参数本身以及数据表提取的值。 在循环退出时,您构建一个查询文本,将 IN 语句中的参数名称连接在一起,然后将参数传递给 SqlCommand 本身。

List<string> pNames = new List<string>();
List<SqlParameter> prms = new List<SqlParameter>();
for (int x = 0; x < dtCups.Rows.Count; x++)

    // Create the parameters names list @0, @1, @2 etc..
    pNames.Add($"@x");

    // Create the parameters, note that I assume a string type parameter with a length of 255 characters max. Adjust if assumption is wrong
    SqlParameter p = new SqlParameter($"@x", SqlDbType.NVarChar, 255);
    p.Value = dtCups.Rows[x][0].ToString();
    prms.Add(p);


.....

// Create the final sql command text from the parameters names
string qryFinal = "select cups from table_B where cups in(" + 
                  string.Join(",", pNames) + ")";
SqlCommand cmd = new SqlCommand(qryFinal, connection);

// Add the parameter list to the command collection and then execute
cmd.Parameters.AddRange(prms.ToArray());
SqlDataReader reader = cmd.ExecuteReader() 

// Or DataAdapter.Fill table
DataTable aTable = new DataTable();
SqlDataAdapter da1 = new SqlDataAdapter(cmd);
da1.Fille(aTable);

【讨论】:

以上是关于查询数据库并输出结果以在 C# 中构建 IN 语句的主要内容,如果未能解决你的问题,请参考以下文章

C# Access 模糊查询SQL语句

如何避免从 C# 构建的 Sql Server 2005 参数化查询变慢

C# linq 多表in语句查询

SQL中逗号分隔的查询结果转换成单个字符串放到in语句里

让sql语句不排序,按照in语句的顺序返回结果

怎样将数组作为sql中in的查询条件?