【问题标题】:SQL Bulk Insert in C# when you have GUID (UniqueIdentifier) Column当您有 GUID (UniqueIdentifier) 列时,C# 中的 SQL 批量插入
【发布时间】:2018-12-11 08:39:11
【问题描述】:

我需要将数据从一个表复制到另一个表。 我收到一条消息异常:

来自数据源的String类型的给定值不能 转换为指定目标列的uniqueidentifier类型",

因为我有 GUID 数据类型的列。

我的代码...

using (SqlConnection destinationConn = new SqlConnection("Data Source = ''; Initial Catalog = ''; Persist Security Info = True; User ID = ''; Password = ''; MultipleActiveResultSets = true"))
            {
                using (SqlBulkCopy bc = new SqlBulkCopy(destinationConn))
                {
                    bc.DestinationTableName = "Animal";

                    destinationConn.Open();

                    bc.ColumnMappings.Add("guid", "guid"); //UniqueIdentifier
                    bc.ColumnMappings.Add("Name", "Name");
                    bc.WriteToServer(dt);  //DATA TABLE object


                }
            }

我该如何解决这个问题?

【问题讨论】:

  • 错误很明显。您尝试将string DataTable 列插入uniqueidentifier 表列。数据表列的类型应该是 Guid
  • 除此之外,如果没有重现问题的代码,就无法提供帮助。不知何故,某处创建了一个字符串列。您如何创建该 DataTable?
  • 看一下this issue,可能你的问题和那个相似或相同。
  • GUID 列中的所有值是否都是有效的 GUID?即以意外方式格式化的空白值、非 GUID 字符串或 GUID 可能会导致问题。最后一句话,我的意思是传统上 GUID 将包含 4 个连字符;如果连字符丢失 SQL 可能不接受该值。您可以选择将字符串包裹在大括号中,并且值不区分大小写。

标签: c# sql-server sqlbulkcopy


【解决方案1】:

我遇到了类似的问题,我解决了。
如果你想检查我的以下代码。

                DataTable dt = new DataTable();
                dt.Columns.Add("IdColumn1", typeof(Guid));
                dt.Columns.Add("IdColumn2", typeof(Guid));
                foreach (var item in MyCollection)
                    dt.Rows.Add(item.obj1, item.obj2);

                using (SqlConnection con = new SqlConnection(ConnectionString))
                {
                    con.Open();

                    using (var bulkCopy = new SqlBulkCopy(con))
                    {
                        bulkCopy.DestinationTableName = "TableName";
                        bulkCopy.ColumnMappings.Add("IdColumn1", "IdColumn1");
                        bulkCopy.ColumnMappings.Add("IdColumn2", "IdColumn2");
                        bulkCopy.WriteToServer(dt);
                    }
                    dt.Dispose();
                }

【讨论】:

    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2017-09-06
    • 2013-09-21
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多