【问题标题】:How to fil SQL table from DataGridView如何从 DataGridView 填充 SQL 表
【发布时间】:2020-04-05 04:41:28
【问题描述】:

我必须从 DataGridView 填充 SQL 表。问题实际上在于,我有一堆具有不同列数的表,我不能编写一个简单的脚本来“逐行”填充它,所以我决定通过 DataTable 推送数据,但我得到一个错误

表类型参数“@data”必须有一个有效的类型名称

我的代码:

private void button1_Click(object sender, EventArgs e)
{
        SqlDataReader sqlReader = null;

        SqlConnection sqlConnection = new SqlConnection(connectionString);
        sqlConnection.Open();

        var dt = new DataTable();

        dt = (DataTable)dataGridView1.DataSource;

        try
        {
            using (SqlCommand command = new SqlCommand(@"DELETE FROM [DB].[dbo].[" + comboBox1.SelectedItem.ToString()+ "]; INSERT INTO [DB].[dbo].[" + comboBox1.SelectedItem.ToString()+ "] VALUES (@data)",sqlConnection))
            {
                command.Parameters.AddWithValue("@data", dt);
                command.ExecuteNonQuery();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            if (sqlReader != null)
                sqlReader.Close();
        }
}

comboBox1.SelectedItem.ToString() 返回表名。

查询的第一部分是删除表,否则它将重复未更改的信息,在此之后我将它发送回来,因为 dataGridView 有所有数据

【问题讨论】:

  • 当你使用DataTable运行时,考虑使用带有参数为DataTableType的存储过程,它可以解决你所有的问题。
  • @TấnNguyên 那么我必须如何设置它的类型CREATE PROCEDURE LoadData @table [TYPE]
  • CREATE TYPE YourTableType AS TABLE() 如创建表脚本。然后CREATE PROCEDURE LoadData @table YourTableTypeFor more information
  • @TấnNguyên 这是否意味着我必须创建一些程序,因为我的表中有不同的列数,或者有一些方法可以使任何列数动态化?正如我所见,我必须在 CREATE TYPE YourTableType AS TABLE() 之后放置带有其类型的列
  • TableType 可以是通用的,可以重用,不需要像目标表那样填满列。然后,您可以在过程中将表名作为第二个参数传递,以协调应插入的表。但是,如果您有更复杂的 DataTableType,请考虑一种表类型的一个过程。这是您未来实施的选择。

标签: c# sql


【解决方案1】:

你能用SqlBulkCopy吗?

棘手的部分是matching column names

如果您不能使用,可以选择使用Table Valued parameters

除了DELETE FROM [dbo].[table],您可能对TRUNCATE TABLE [dbo].[table] 命令感兴趣

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2013-08-11
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多