C# 将数据从excel文件导入c

C# 将数据从excel文件导入c,c#,excel,datagridview,C#,Excel,Datagridview,我有一个excel文件:城市咖啡馆电话号码 纽约三重奏咖啡馆78654 纽约中央咖啡馆32344 华盛顿之家咖啡馆23222 华盛顿中央咖啡馆11111 拉伍德咖啡馆45434 德克萨斯中央咖啡馆16564 ComboBox1包含城市。 ComboBox2包含咖啡馆。 按钮1写入datagridview。 我的问题是: 例如:我在组合框1中选择华盛顿,然后在组合框2中选择中央咖啡馆并单击按钮1。 我看到了:纽约中央咖啡馆32344 华盛顿中央咖啡馆11111 德克萨斯中央咖啡馆16564 在da

我有一个excel文件:城市咖啡馆电话号码 纽约三重奏咖啡馆78654 纽约中央咖啡馆32344 华盛顿之家咖啡馆23222 华盛顿中央咖啡馆11111 拉伍德咖啡馆45434 德克萨斯中央咖啡馆16564

ComboBox1包含城市。 ComboBox2包含咖啡馆。 按钮1写入datagridview。 我的问题是: 例如:我在组合框1中选择华盛顿,然后在组合框2中选择中央咖啡馆并单击按钮1。 我看到了:纽约中央咖啡馆32344 华盛顿中央咖啡馆11111 德克萨斯中央咖啡馆16564 在datagridview中。 但我在Combobox1中选择了华盛顿,所以我只想看看 华盛顿中央咖啡馆11111 在datagridview中

我该怎么做

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
namespace uy
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    OleDbConnection baglan = new OleDbConnection(@"Provider =Microsoft.ACE.OLEDB.12.0;Data Source=C:\\users\\toshiba\\desktop\\proje-1; Extended Properties='Excel 12.0 xml;HDR=YES;'");
    DataTable dt = new DataTable();
    private void Form1_Load(object sender, EventArgs e)
    {
        OleDbConnection baglan = new OleDbConnection(@"Provider =Microsoft.ACE.OLEDB.12.0;Data Source=C:\\users\\toshiba\\desktop\\proje-1; Extended Properties='Excel 12.0 xml;HDR=YES;'");

        baglan.Open();
        string sql = "SELECT  * FROM [Sheet1$A1:A1000]";
        OleDbCommand komut = new OleDbCommand(sql, baglan);
        OleDbDataReader dr = null;
        dr = komut.ExecuteReader();



        while (dr.Read())
        {
            if (!comboBox1.Items.Contains(dr[0].ToString()))
            {
                comboBox1.Items.Add(dr[0].ToString());
            }


        }
        baglan.Close();
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        comboBox2.Items.Clear();

        OleDbConnection baglan = new OleDbConnection(@"Provider =Microsoft.ACE.OLEDB.12.0;Data Source=C:\\users\\toshiba\\desktop\\proje-1; Extended Properties='Excel 12.0 xml;HDR=YES;'");
        baglan.Open();
        string sql_b = "SELECT * FROM [Sheet1$B1:B1000]";
        OleDbCommand komut_b = new OleDbCommand(sql_b, baglan);
        OleDbDataReader dr_b = null;
        dr_b = komut_b.ExecuteReader();

        string sql_a = "SELECT * FROM [Sheet1$A1:A1000]";
        OleDbCommand komut_a = new OleDbCommand(sql_a, baglan);
        OleDbDataReader dr_a = null;
        dr_a = komut_a.ExecuteReader();
        while (dr_a.Read() && dr_b.Read())
        {
            if (dr_a[0].ToString() == comboBox1.SelectedItem.ToString())
            {
                if (!comboBox2.Items.Contains(dr_b[0].ToString()))
                {
                    comboBox2.Items.Add(dr_b[0].ToString());
                }
            }
        }
        baglan.Close();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM[Sheet1$]  where Cafe like '%" + comboBox2.SelectedItem + "%'", baglan);
        dt.Clear();
        baglan.Open();

        da.Fill(dt);
        dataGridView1.DataSource = dt;

        baglan.Close();
    }
}
}
更改您的代码,例如

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    comboBox2.Items.Clear();
    OleDbConnection baglan = new OleDbConnection(@"Provider =Microsoft.ACE.OLEDB.12.0;Data Source=C:\\users\\toshiba\\desktop\\proje-1; Extended Properties='Excel 12.0 xml;HDR=YES;'");
    baglan.Open();
    string sql_b = "SELECT * FROM [Sheet1$] where [city]=@city";        
    OleDbCommand komut_b = new OleDbCommand(sql_b, baglan);
    komut_b.Parameters.AddWithValue("@city", comboBox1.Text.ToString());
    OleDbDataReader dr_b = null;
    dr_b = komut_b.ExecuteReader();        
    while (dr_b.Read())
    {           
      comboBox2.Items.Add(dr_b[0].ToString());                
    }
    baglan.Close();
}

private void button1_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
 OleDbConnection baglan = new OleDbConnection(@"Provider =Microsoft.ACE.OLEDB.12.0;Data Source=C:\\users\\toshiba\\desktop\\proje-1; Extended Properties='Excel 12.0 xml;HDR=YES;'");
OleDbCommand comm = new OleDbCommand();
OleDbDataAdapter dAdpter = new OleDbDataAdapter(comm);
comm.Connection = baglan;
comm.CommandText = "SELECT * FROM[Sheet1$]  where Cafe like @cafe and city =@city";   
comm.Parameters.AddWithValue("@cafe", "%" + comboBox2.Text.ToString() + "%"); 
comm.Parameters.AddWithValue("@city",combobox1.Text.ToString());
dAdpter.Fill(dt);
 datagridview.DataSource=dt;
}

我像那样重新组织,但现在当程序运行时,我可以选择城市和咖啡馆,但当我单击按钮时,datagridview是空的

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        comboBox2.Items.Clear();

        OleDbConnection baglan = new OleDbConnection(@"Provider =Microsoft.ACE.OLEDB.12.0;Data Source=C:\\users\\toshiba\\desktop\\proje-1; Extended Properties='Excel 12.0 xml;HDR=YES;'");
        baglan.Open();

        string sql_a = "SELECT * FROM [Sheet1$] where [City]=@City";
        OleDbCommand komut_a = new OleDbCommand(sql_a, baglan);
        komut_a.Parameters.AddWithValue("@City", comboBox1.SelectedItem.ToString());
        OleDbDataReader dr_a = null;
        dr_a = komut_a.ExecuteReader();
        string sql_b = "SELECT * FROM [Sheet1$B1:B1000]";
        OleDbCommand komut_b = new OleDbCommand(sql_b, baglan);
        OleDbDataReader dr_b = null;
        dr_b = komut_b.ExecuteReader();

        while (dr_a.Read() && dr_b.Read())
        {
            if (dr_a[0].ToString() == comboBox1.SelectedItem.ToString())
            {
                if (!comboBox2.Items.Contains(dr_b[0].ToString()))
                {
                    comboBox2.Items.Add(dr_b[0].ToString());
                }
            }
        }
        baglan.Close();


    }

    private void button1_Click(object sender, EventArgs e)
    {


        DataTable dt = new DataTable();
        OleDbConnection baglan = new OleDbConnection(@"Provider =Microsoft.ACE.OLEDB.12.0;Data Source=C:\\users\\toshiba\\desktop\\proje-1; Extended Properties='Excel 12.0 xml;HDR=YES;'");
       OleDbCommand comm = new OleDbCommand();
 OleDbDataAdapter dAdpter = new OleDbDataAdapter(comm);
comm.Connection = baglan;
        comm.CommandText = "SELECT * FROM[Sheet1$]  where Cafe like '%@Dormitory%'";
        comm.Parameters.AddWithValue("@Cafe",    comboBox2.SelectedItem.ToString());

        dAdpter.Fill(dt);
        dataGridView1.DataSource = dt;
        baglan.Close();
    }

第一件事是不需要对OLEDB baglan进行多次声明,第二件事是使用参数化查询。你能给我看一下代码吗,我不知道怎么做。下面是新代码,但工作不正常。谢谢你的帮助,但是komut_b.Parameters。AddWithValue@city,+comboBox1.SelectedText.ToString;行是错误的。我删除了+并将其修复。但当程序运行时,我可以选择城市,但combobox 2为空,我不能选择咖啡馆。@OsmanFurkanYılmaz是的,这是一个打字错误,我已将所选文本更改为combobox的文本属性。现在应该可以了。您可以设置一个断点来查看查询的框架是否正确。请随意询问是否有任何问题。对不起,您可以叫我初学者。但我不明白,我怎么才能解决这个问题。程序运行时,Combobox2为空。代码的正确版本是什么,thanks@OsmanFurkanYılmaz Combobox2将在您更改combox1中的索引时填充,请参阅加载Combox2的代码写入selectedindex changed事件。如果要在表单加载时加载它,可以在表单加载时更改combobox1.SelectedIndex=1这样的combobox1.SelectedIndex=1的索引,以便触发事件或在表单加载时调用该方法;通信参数。AddWithValue@cafe,%+comboBox2.Text.ToString+%;不,我再次看到datagridview中的每个中央咖啡馆行,就像我的第一个代码一样。因为从[Sheet1$]中选择*,其中像咖啡馆一样的“%@Sommety%”应该从[Sheet1$]中选择*,其中像咖啡馆一样的“%@Sommety%”和城市=@city,也就是说,您没有根据城市进行过滤。请参阅我的答案中编辑的代码,我已经这样做了。