SND*_*SND 15 c# database sql-server sqlbulkcopy
在Excel表(以transferTable)看完后,我想将数据添加到使用SqlBulkCopy的新表(destinationTable会),但我得到的错误:
Cannot access destination table 'test'
Run Code Online (Sandbox Code Playgroud)
我尝试使用默认的表名并使用方括号,但这不起作用.
有什么建议?
private void writeToDBButton_Click(object sender, EventArgs e) {
MakeTable();
destinationTable.TableName = "test";
testDBDataSet.Tables.Add("test");
// Connects to the sql-server using Connection.cs
SqlConnection connection = Connection.GetConnection();
using (connection) {
connection.Open();
// Uses SqlBulkCopy to copy the data from our transferTable to the destinationTable
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) {
bulkCopy.DestinationTableName = destinationTable.TableName;
try {
// Write from the source to the destination.
bulkCopy.WriteToServer(transferTable);
this.dataGridView2.DataSource = destinationTable;
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
connection.Close();
}
}
}
private void saveDBButton_Click(object sender, EventArgs e) {
this.Validate();
this.usersBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.testDBDataSet);
}
private void MakeTable() {
for (int counter = 0; counter < columns; counter++) {
DataColumn dummy = new DataColumn();
dummy.DataType = System.Type.GetType("System.Double");
destinationTable.Columns.Add(dummy);
}
}
Run Code Online (Sandbox Code Playgroud)
Tja*_*alt 13
我的问题有点不同,结果我的表名是SQL中的保留关键字所以我必须执行以下操作:
bulkCopy.DestinationTableName = $"{schema}.[{tableName}]";
Run Code Online (Sandbox Code Playgroud)
schema目标模式和tableName目标表名称在哪里
从文档中
DestinationTableName是一个由三部分组成的名称[数据库].[owningschema].[name].如果选择,您可以使用其数据库和拥有模式限定表名.但是,如果表名使用下划线("_")或任何其他特殊字符,则必须使用周围的括号来转义名称,如([database].[owningschema].[name_01])
小智 5
我最近遇到了同样的错误,并在谷歌搜索答案时发现了这篇文章。我能够通过向正在执行大容量复制命令的用户授予对目标表的插入和选择权限来解决该问题。最初,我只向用户授予插入权限,并收到“无法访问目标表”错误。
检查连接到db的用户是否有
GRANT ALTER ON [dbo].[TABLE_XXX] TO [appuser]
Run Code Online (Sandbox Code Playgroud)
正如Jhilden在MSDN论坛上的回答所建议的那样.