SqlBulkcopy .net 4.0无法访问目标表

时间:2015-03-01 20:54:22

标签: c# ado.net sqlbulkcopy

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

  

无法访问目标表“mytable”

尽管谷歌搜索并且到处寻找我无法找到解决我正在获得的错误的方法

有些帖子提及权限,我已完成以下操作:

GRANT SELECT, UPDATE, DELETE, INSERT TO bulkadmin

但仍未成功。

我错过了明显的吗?

非常感谢帮助。

修改

我将具有1000个表的3个数据库批量复制到01“目标”数据库。 我已经简化了我使用的代码,并且没有运气进行测试。目的是在并行中使用todo,但我希望首先使用简单的表来使用它

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);
                        }
                    }
                }
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

在表名

之前编写模式

更改

bulkCopy.DestinationTableName = "testTable";

bulkCopy.DestinationTableName = "dbo.testTable";

答案 1 :(得分:0)

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

BEGIN
   SET IDENTITY_INSERT [building] ON;

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

   SET IDENTITY_INSERT [building] OFF;
END

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

答案 2 :(得分:0)

SqlBulkCopy WriteToServer 方法中的表名必须用 [] 符号包围。