C# 从SQLServerExpress数据库读取表

C# 从SQLServerExpress数据库读取表,c#,winforms,sql-server-express,C#,Winforms,Sql Server Express,我试图在SQLServerExpress中读取数据库中包含的表,但它总是显示为空。我做错了什么 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";

我试图在SQLServerExpress中读取数据库中包含的表,但它总是显示为空。我做错了什么

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";

    string query = "SELECT * FROM INFORMATION_SCHEMA.TABLES";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(query, connection);
        command.Connection.Open();

        command.ExecuteNonQuery();
    }
}
已更新但仍为空:

  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        try {

            string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
            SqlConnection con2 = new SqlConnection(connectionString);
            con2.Open();
            string query = "SELECT * FROM INFORMATION_SCHEMA.TABLES";
            SqlCommand cmd2 = new SqlCommand(query, con2);

            SqlDataReader dr2 = cmd2.ExecuteReader();
            while (dr2.Read())
            {

                comboBox1.Items.Add((string)dr2[0]);

            }


        }


        catch (Exception ex)
        {

            MessageBox.Show(ex.ToString());
        }}
最新更新的代码。我想我已经猜到了,但仍然显示为空:

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        try {

            string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
            SqlConnection con2 = new SqlConnection(connectionString);
            con2.Open();
            string query = "SELECT * FROM INFORMATION_SCHEMA.TABLES ";
            SqlCommand cmd2 = new SqlCommand(query, con2);

            SqlDataReader dr2 = cmd2.ExecuteReader();
            while (dr2.Read())
            {

                string Dtables = dr2.GetString(dr2.GetOrdinal("TABLE_NAME"));
                comboBox1.Items.Add(Dtables);

            }

        }

        catch (Exception ex)
        {

            MessageBox.Show(ex.ToString());
        }}
全班:

    namespace unique_database{ public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {
        string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
        string query = "CREATE TABLE [dbo].[" + textBox1.Text + "](" + "[Code] [varchar] (13) NOT NULL," +
       "[Description] [varchar] (50) NOT NULL," + "[NDC] [varchar] (50) NULL," +
        "[Supplier Code] [varchar] (38) NULL," + "[UOM] [varchar] (8) NULL," + "[Size] [varchar] (8) NULL,)";


        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand(query, connection);
            command.Connection.Open();
            command.ExecuteNonQuery();
        }

        SqlConnection con = new SqlConnection("Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True");
        string filepath = textBox2.Text; //"C:\\Users\\jdavis\\Desktop\\CRF_105402_New Port Maria Rx.csv";
        StreamReader sr = new StreamReader(filepath);
        string line = sr.ReadLine();
        string[] value = line.Split(',');
        DataTable dt = new DataTable();
        DataRow row;
        foreach (string dc in value)
        {
            dt.Columns.Add(new DataColumn(dc));
        }

        while (!sr.EndOfStream)
        {
            value = sr.ReadLine().Split(',');
            if (value.Length == dt.Columns.Count)
            {
                row = dt.NewRow();
                row.ItemArray = value;
                dt.Rows.Add(row);
            }
        }
        SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock);
        bc.DestinationTableName = textBox1.Text;
        bc.BatchSize = dt.Rows.Count;
        con.Open();
        bc.WriteToServer(dt);
        bc.Close();
        con.Close();

    }

    private void button3_Click(object sender, EventArgs e)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Filter = "CSV files (*.csv)|*.csv|XML files (*.xml)|*.xml";


        if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            this.textBox2.Text = openFileDialog.FileName;
        }
    }

    private void FillCombo()
    {
        try
        {

            string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
            using (SqlConnection con2 = new SqlConnection(connectionString))
            {
                con2.Open();
                string query = "SELECT * FROM INFORMATION_SCHEMA.TABLES ";
                SqlCommand cmd2 = new SqlCommand(query, con2);

                SqlDataReader dr2 = cmd2.ExecuteReader();
                while (dr2.Read())
                {
                    int col = dr2.GetOrdinal("TABLE_NAME");
                    comboBox1.Items.Add(dr2[col].ToString());
                }

            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

使用ExecuteReader()而不是ExecuteOnQuery()。然后使用SqlDataReader()获取结果。

好的,首先,不要使用
comboBox1\u SelectedIndexChanged
填充
comboBox1
。 使用
YourForm.OnLoad
事件、表单构造函数或单击按钮,但不要使用
SelectedIndexChanged
填充自身,因为每次选择
comboBox1
中的一项时都会执行此过程

要获取列索引,只需使用:
dr2.GetOrdinal(“TABLE_NAME”)


你需要读入数据阅读器之类的东西。ExecuteOnQuery适用于像INSERT这样不返回值/数据的东西。更新了代码但仍然为空@DonboitNott这有多难@Fourat这不是我要找的。@Fourat说的是表格,不是表格值。我知道怎么做already@Jevon这个答案让你知道从哪里开始。有关ExecuteReader()的MSDN帮助,我相信您会在那里找到一些示例。是的,我做了所有这些,但由于某些原因,我最新更新的代码@mcnets仍然为空。您的数据库中有表吗?如果在SSMS中使用select语句,有多少个结果?你打开组合框了吗?删除实际问题的代码并粘贴整个班级。是的,我打开了组合框,是的,我有表格。其中4个。我运行了
“SELECT*FROM INFORMATION\u SCHEMA.TABLES”
,出现了TABLE\u目录、TABLE\u SCHEMA、TABLE\u名称和TABLE\u类型。将范围缩小到以下命令“
从信息模式中选择表格名称。表格
单独显示表格数据,因此存在表格。此代码中有错误,您可以编译它而不出错吗?
private void FillCombo()
{
    try 
    {
        string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
        using (SqlConnection con2 = new SqlConnection(connectionString))
        {
            con2.Open();
            string query = "SELECT * FROM INFORMATION_SCHEMA.TABLES";
            SqlCommand cmd2 = new SqlCommand(query, con2);

            SqlDataReader dr2 = cmd2.ExecuteReader();
            while (dr2.Read())
            {
                int col = dr2.GetOrdinal("TABLE_NAME");
                comboBox1.Items.Add(dr2[col].ToString());
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}