【问题标题】:Inserting a single row with large number of columns in SQL Server在 SQL Server 中插入包含大量列的单行
【发布时间】:2012-03-01 02:55:00
【问题描述】:

我有一个巨大的表单,其中包含大约 110 个 fields 列(单行),需要保存在数据库中。

使用 ADO.NET 将这么多列插入数据库的最佳方法是什么?

我认为我不应该使用这样的插入语句,因为由于字段的数量,查询会非常大。

conn.Open();
string insertString = @"
    insert into Categories (CategoryName, Description)
    values ('Miscellaneous', 'Whatever doesn''t fit elsewhere')";

SqlCommand cmd = new SqlCommand(insertString, conn);
cmd.ExecuteNonQuery();

我想将数据转储到临时文件中,然后将它们添加到数据表中,然后使用 SqlBulkCopy 将它们插入到数据库中。

有没有更好的方法?您将如何处理这种情况?

【问题讨论】:

  • 如果您的表格也有 ~110 个字段,很抱歉,您做错了。重构/规范化为多个表并执行多个相关的INSERT 语句。
  • 一次要添加多少行?它只是单行 110 列,还是我们一次谈论很多行?
  • @Yuck:我情不自禁。我希望我能花时间来做这件事。但不幸的是,目前我无法控制。
  • @MichaelFredrickson:这将是一个用户在大部分字段中填写数据的网页。一旦他们提交数据,它将被放入数据库。粗略估计,三天内大约有 1500 名用户将使用该表单。
  • @MichaelFredrickson:准确回答你,每次提交一行,每行包含110个字段,共有1500个用户将访问该表单。

标签: sql-server ado.net bulkinsert sqlbulkcopy


【解决方案1】:

恐怕没有一个很好的快捷方式来插入这么多的列,但是使用参数可能会节省一些调试时间。通过使用参数,您无需担心字符串中的撇号和类型转换之类的事情。这是一个示例:

public static void TryThis()
{
  try
  {
    using  (SqlConnection  con = new SqlConnection())
    {
      con.ConnectionString = "YourConnectionString";
      con.Open();
      SqlCommand cmd = new SqlCommand();
      cmd.Connection = con;
      cmd.CommandType = CommandType.Text;
      cmd.CommandText = "INSERT INTO Categories (CategoryName, Description)  VALUES (@CategoryName, @Description)";
      cmd.Parameters.AddWithValue("CategoryName", "Miscellaneous");
      cmd.Parameters.AddWithValue("Description", "Whatever doesn't fit elsewhere");
    }
  }
  catch (Exception ex)
  {
    throw new Exception(ex.Message);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2018-05-20
    • 2014-08-01
    • 1970-01-01
    • 2023-03-08
    • 2023-01-01
    • 1970-01-01
    相关资源
    最近更新 更多