【问题标题】:SqlBulkcopy .net 4.0 cannot access destination tableSqlBulkcopy .net 4.0 无法访问目标表
【发布时间】:2015-05-02 03:57:12
【问题描述】:

我在 .net 中编写了一个程序,它应该将表数据从一台服务器复制到另一台服务器。但是我收到一个错误:

无法访问目标表“mytable”

尽管谷歌搜索并到处寻找,但我找不到解决我遇到的错误的方法

有些帖子提到了权限,我做了以下事情:

GRANT SELECT, UPDATE, DELETE, INSERT TO bulkadmin

但还是没有成功。

我错过了显而易见的事情吗?

非常感谢您的帮助。

编辑

我将 3 个包含 1000 个表的数据库批量复制到 01 个“目标”数据库。 我已经简化了我使用的代码,也没有运气测试。目的是并行执行,但我想让它首先使用一个简单的表

private void TestBulkCopy(string sourceServer, string sourceDatabase, List<string> sourceTables)
    {
            string connectionStringSource = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString;
            string connectionStringTarget = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString;

            string sqlGetDataFromSource = string.Format("SELECT * FROM  {0}", "testTable");

            using (var sourceConnection = new SqlConnection(connectionStringSource))
            {
                sourceConnection.Open();
                using (var cmdSource = new SqlCommand(sqlGetDataFromSource, sourceConnection))
                using (SqlDataReader readerSource = cmdSource.ExecuteReader())
                {
                    using (var sqlTargetConnection = new SqlConnection(connectionStringTarget))
                    {
                        sqlTargetConnection.Open();

                        using (var bulkCopy = new SqlBulkCopy(sqlTargetConnection, SqlBulkCopyOptions.TableLock, null))
                        {
                            bulkCopy.DestinationTableName = "testTable";
                            bulkCopy.SqlRowsCopied += OnSqlRowsCopied;
                            bulkCopy.BatchSize = 2600;
                            bulkCopy.NotifyAfter = 50;
                            bulkCopy.BulkCopyTimeout = 60;
                            bulkCopy.WriteToServer(readerSource);
                        }
                    }
                }
            }
        }
    }

【问题讨论】:

  • 没什么可继续的.....你能给我们看一些代码吗?你的桌子是什么样的(结构)?使用 SqlBulkCopy 的 C# 代码是什么样的?
  • 嗨,marc_s,我已经编辑了这个问题,我把我使用的 c# 代码放在了我使用的表中。我有 1000 个表,所以不确定结构是否有帮助,因为我无法修改它们。数据从一个表直接复制到另一个表,结构完全相同。感谢您的宝贵时间
  • 还有表结构 ???

标签: c# ado.net sqlbulkcopy


【解决方案1】:

在表名前写上Schema

改变

bulkCopy.DestinationTableName = "testTable";

bulkCopy.DestinationTableName = "dbo.testTable";

【讨论】:

  • 谢谢老兄。这对我有很大帮助。
【解决方案2】:

我认为您的目标表已定义具有自动编号标识的字段。因此,SqlBulkCopy 无法将值复制到该列中。您必须使用此代码关闭目标表上的目标编号标识列:

BEGIN
   SET IDENTITY_INSERT [building] ON;

   INSERT INTO [Table2](.....)  
   VALUES(@id, @id_project,....)

   SET IDENTITY_INSERT [building] OFF;
END

或编辑目标表的定义并删除该列上的自动编号标识。

【讨论】:

    【解决方案3】:

    SqlBulkCopyWriteToServer方法中的表名必须用[ ]符号括起来。

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      相关资源
      最近更新 更多