C# GridView+System.Data.SqlClient.SqlException:“无效的对象名称“列表”

C# GridView+System.Data.SqlClient.SqlException:“无效的对象名称“列表”,c#,sql,sql-server,C#,Sql,Sql Server,我有个问题 我想在Form2中显示自动创建的表 我得到一个错误: System.Data.SqlClient.SqlException:无效的对象名称“列表” 但仅对于自动创建的列表表,手动创建的列表1在Form2中工作良好 idk为什么不适用于自动创建的表 我使用此代码来显示表对列表1有效,但对列表无效-> 私有void Form2\u加载对象发送方,事件参数e { EmployeesListDataGridView.DataSource=GetEmployeesList; } 私有数据表Ge

我有个问题

我想在Form2中显示自动创建的表

我得到一个错误:

System.Data.SqlClient.SqlException:无效的对象名称“列表”

但仅对于自动创建的列表表,手动创建的列表1在Form2中工作良好

idk为什么不适用于自动创建的表

我使用此代码来显示表对列表1有效,但对列表无效->

私有void Form2\u加载对象发送方,事件参数e { EmployeesListDataGridView.DataSource=GetEmployeesList; } 私有数据表GetEmployeesList { DataTable dtEmployees=新的DataTable; string connString=ConfigurationManager.ConnectionString[WindowsFormsApp1.Properties.Settings.ConsoleApp7ConnectionString2].ConnectionString; 使用SqlConnection con=newsqlconnectionconstring { 使用SqlCommand cmd=new SqlCommandSELECT*FROM[List],con//List1进行测试。。。 { 不公开; SqlDataReader=cmd.ExecuteReader; dtEmployees.Loadreader; } } 返回员工; } 在这里,我使用列表在应用程序中自动创建一个表 -->

创建的表在ServerExplorer中显示,因此->

//自动创建,不在GridView中工作

CREATE TABLE [dbo].[List] (
    [IDNumbers] INT             IDENTITY (1, 1) NOT NULL,
    [Numbers]   DECIMAL (18, 8) NULL,
    CONSTRAINT [PK_List] PRIMARY KEY CLUSTERED ([IDNumbers] ASC)
);
所以…在我手动创建了一个测试表List1之后,它可以在GridView中显示我的数据库..->

//手动创建

CREATE TABLE [dbo].[List1] (
    [IDNumbers] INT             IDENTITY (1, 1) NOT NULL,
    [Numbers]   DECIMAL (18, 8) NULL,
    CONSTRAINT [PK_List1] PRIMARY KEY CLUSTERED ([IDNumbers] ASC)
);
//编辑,连接字符串

Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\ConsoleApp7.mdf;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=30
//编辑、创建数据库

        // Create New Database
    private void button7_Click(object sender, EventArgs e)
    {
        if (MessageBox.Show("Do you want to Delete the full Table and Create a new Table?", "Delete Table, and Create a new Table!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {
         Task t5 = new Task(CreateNewDatabase); Task.Run(() => CreateNewDatabase());
        }
        else
        {   
        }
    }


        private async void CreateNewDatabase()
    {
        string str = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\xxx\source\repos\ConsoleApp7\ConsoleApp7\ConsoleApp7.mdf;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=30";
        using (SqlConnection connection = new SqlConnection(str))
        {
            connection.Open();

            string tableToDelete = "List";   //table name

            bool tableExists = false;
            DataTable dt = connection.GetSchema("tables");
            foreach (DataRow row in dt.Rows)
            {
                if (row["TABLE_NAME"].ToString() == tableToDelete)
                {
                    tableExists = true;
                    break;
                }
                else
                {
                }
            }
            if (tableExists)
            {
                using (SqlCommand cmd2 = new  SqlCommand(string.Format("DROP TABLE {0}", tableToDelete), connection))
                {
                    cmd2.ExecuteNonQuery();
                }
            }
            else
            {
            }
            {
 SqlCommand cmd1 = new SqlCommand("CREATE TABLE [dbo].[List]("
                            + "[IDNumbers] INT IDENTITY (1, 1) NOT NULL,"
                            + "[Numbers] DECIMAL (18, 8) NULL,"
                            + "CONSTRAINT [PK_List] PRIMARY KEY CLUSTERED ([IDNumbers] ASC))", connection);
                    {
                        cmd1.ExecuteNonQuery();
                        AppendTextBox("Full Clear Database Table created.");
                        connection.Close();
                }
            }
        }

    }

如果我没有误解你的问题 您的代码将以这种方式工作

private DataTable GetEmployeesList()
    {
        DataTable dtEmployees = new DataTable();


        using (SqlConnection con = new SqlConnection("Data Source=yourconnectin;Initial Catalog=dbtest;Integrated Security=True"))
        {
            cn.Open();

            string createTable = "IF OBJECT_ID('List') IS  NULL Begin " +
               "CREATE TABLE [dbo].[List]("+
                      " [IDNumbers] INT IDENTITY(1, 1) NOT NULL,"+
                        "[Numbers] DECIMAL(18, 8) NULL," +
                        "  CONSTRAINT[PK_List] PRIMARY KEY CLUSTERED([IDNumbers] ASC))" +
                 "END";

            using (SqlCommand cmddd = new SqlCommand(createTable, cn))
            {
                cmddd.ExecuteNonQuery();
            }
            using (SqlCommand cmd = new SqlCommand("SELECT * FROM List", cn))// List1 for Testing...
            {
                SqlDataReader reader = cmd.ExecuteReader();

                dtEmployees.Load(reader);
            }
        }
        return dtEmployees;
    }

什么时候创建列表?在GetEmployeesList函数之前还是在GetEmployeesList函数之后?我能看到完整的代码吗?@EvaLai我有两个按钮。在我的应用程序中,按钮1启动一个正在创建新表的任务,第二个按钮打开一个新表单,并显示GridView不在新任务中。它在单击Bu后成功创建了新表吗tton 1?无效对象名称“List”的错误消息表明它找不到List table,没有List table。这个问题没有多大意义。我不明白自动创建表是什么意思。为什么要在加载表单时在数据库中创建表?这似乎很荒谬。第二次创建时会发生什么r表单加载?谢谢…我明白了,我必须学习更多,才能编写工作代码…感谢代码片段:
private DataTable GetEmployeesList()
    {
        DataTable dtEmployees = new DataTable();


        using (SqlConnection con = new SqlConnection("Data Source=yourconnectin;Initial Catalog=dbtest;Integrated Security=True"))
        {
            cn.Open();

            string createTable = "IF OBJECT_ID('List') IS  NULL Begin " +
               "CREATE TABLE [dbo].[List]("+
                      " [IDNumbers] INT IDENTITY(1, 1) NOT NULL,"+
                        "[Numbers] DECIMAL(18, 8) NULL," +
                        "  CONSTRAINT[PK_List] PRIMARY KEY CLUSTERED([IDNumbers] ASC))" +
                 "END";

            using (SqlCommand cmddd = new SqlCommand(createTable, cn))
            {
                cmddd.ExecuteNonQuery();
            }
            using (SqlCommand cmd = new SqlCommand("SELECT * FROM List", cn))// List1 for Testing...
            {
                SqlDataReader reader = cmd.ExecuteReader();

                dtEmployees.Load(reader);
            }
        }
        return dtEmployees;
    }