检索与多或

本文关键字:检索 | 更新日期: 2023-09-27 18:15:22

我正在创建WFP应用程序,我想检索表到datagridview通过在列表框中选择多个值,获取从列表框中选择的所有数据,所以主要思想将此查询从SQL应用到应用程序

select * from Vwtb where firstname='' or firstaname='' or ..

我已经尝试过while循环和搜索了很多,但没有工作,这是我的代码,请如果它对你来说很奇怪,我不专业:)

string[] orand = { "or"+listBox1.Text };
        foreach (string sm in orand)
        {

            cn.Open();
            string select = "select * from productvw where firstname='" + sm + "'";
            SqlDataAdapter dataAdapter = new SqlDataAdapter(select, cn);
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
            DataTable ds = new DataTable();
            dataAdapter.Fill(ds);
            dataGridView1.ReadOnly = true;
            dataGridView1.DataSource = ds;
            cn.Close();
        }

任何类型的帮助将是如此感激....

检索与多或

您可以将您的数组转换为可用于in操作符的字符串。要实现这一点,请使用以下扩展方法

public static  class StaticClass 
  {
   public  static string ConvertStringArrayToString(this string[] array)
    {
        StringBuilder builder = new StringBuilder();
        for (int i=0;i<array.Length;i++)
        {
            builder.Append(array[i]);
            if(i+1==array.Length)break;
            builder.Append(',');
        }
        return builder.ToString();
    }
}

然后在代码中像这样使用

string[] orand = { "or"+listBox1.Text };
var values=orand.ConvertStringArrayToString();     
        cn.Open();
        string select =" SELECT * FROM productvw WHERE firstname IN "+"("+values+")"
        SqlDataAdapter dataAdapter = new SqlDataAdapter(select, cn);
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
        DataTable ds = new DataTable();
        dataAdapter.Fill(ds);
        dataGridView1.ReadOnly = true;
        dataGridView1.DataSource = ds;
        cn.Close();

您可以使用IN操作符

string command = "SELECT * FROM productvw WHERE firstname IN (@names)";
SqlDataAdapter dataAdapter = new SqlDataAdapter(select, cn);
dataAdapter.Parameters.Add("@names", names);

名称将是一个字符串列表,List<string>,并且将包含您想要使用的所有名字。

可以使用以下语法:

SELECT * 
FROM productvw  
WHERE firstname IN (value1,value2,...);

首先创建一个循环,该循环生成sql字符串并填充值。