2015-09-29 20 views
0

IM创造世界粮食计划署应用程序,我想检索表的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(); 
     } 

任何类型的帮助会因此感激.. ..

+0

我认为这将是更好的获得所有的名字,然后查询一次像'select * from Vwtb where'firstaname in('','',''...' –

回答

1

您可以将阵列转换成可以在operator.for实现这一目标所使用的字符串,用这个扩展方法

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(); 
1

您可以使用IN运算符。

string command = "SELECT * FROM productvw WHERE firstname IN (@names)"; 

SqlDataAdapter dataAdapter = new SqlDataAdapter(select, cn); 
dataAdapter.Parameters.Add("@names", names); 

这些名称将是字符串列表List<string>,并且将包含您要使用的所有名字。通过创建生成SQL字符串填充值的循环

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

开始:

+0

感谢您的答案兄弟,但我怎么能参数与SqlDataAdapter一起使用? – rasti

+0

@ari欢迎您!您不必添加比答案中的代码更多的内容。您在适配器的Parameters属性中添加一个参数。这不清楚吗? – Christos

0

您可以使用下面的语法。