gpt4 book ai didi

c# - ExecuteNonQuery 无法创建 TempTable SQL Server

转载 作者:行者123 更新时间:2023-11-30 21:28:04 24 4
gpt4 key购买 nike

临时表未在数据库中创建。我验证了凭据有权创建临时表。复制并粘贴 SQL 命令,它可以在 SSMS 中使用。

调试时不会抛出异常。 cmd 变量在执行前具有正确的连接和 SQL 文本。

我已经在应用程序的其他部分使用了相同的连接字符串来成功查询服务器,所以那里没有问题。

我的目标是创建一个临时表,然后通过 SqlBulkCopy 填充它,然后进行合并更新,然后删除临时表。

编辑:我的错误是在 DestinationTableName 中引用了错误的表,但更重要的是,我正在使用无法看到临时表的单独连接检查 SSMS 中的进度。此外,finally 语句是多余的。谢谢大家!

        string tmpTable = @"create table #TempTable 
(
[Column1] [varchar](50) NOT NULL,
[Column2] [varchar](50) NOT NULL,
[Column3] [varchar](50) NOT NULL
)";
string connString = "Data Source=AzureDBServer;" +
"Initial Catalog=Database;" +
"User id=UserId;" +
"Password=Password;";

using (SqlConnection connection = new SqlConnection(connString))
{
connection.Open();
SqlCommand cmd = new SqlCommand(tmpTable, connection);
cmd.ExecuteNonQuery();

try
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = "#TempTable";
bulkCopy.WriteToServer(dataTable);

string mergeSql = "<Will eventually have merge statement here>";

cmd.CommandText = mergeSql;
int results = cmd.ExecuteNonQuery();

cmd.CommandText = "DROP TABLE #TempTable";
cmd.ExecuteNonQuery();
}
}
catch (Exception)
{
throw;
}

finally
{
SqlCommand final = new SqlCommand("DROP TABLE #TempTable", connection);
final.ExecuteNonQuery();

}

}

最佳答案

I'm checking in SSMS using the same credentials, getting the "Invalid object name '#TempTable'" error after the code completes

那是因为 SSMS 使用不同的连接,而像 #Foo 这样的临时表是每个连接。您不能从任何其他连接访问#Foo 临时表。

听起来您想要一个global 临时表。这就像将它命名为 ##Foo 而不是 #Foo 一样简单。全局临时表在所有连接上共享。

关于c# - ExecuteNonQuery 无法创建 TempTable SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56872758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com