gpt4 book ai didi

c# - 批量插入未保存到数据库

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:20 25 4
gpt4 key购买 nike

我有以下方法。执行完成后,我的数据库表中没有数据了。 并且没有异常被抛出/吞没。奇怪的是,如果我将查询字符串剪切并粘贴到 SSMS 中并执行它,脚本就会执行并且表中有数据。这在 .NET 中不起作用有什么原因吗?

static void ImportTableData(String tableName)
{
using (SqlConnection connection = new SqlConnection(
@"Server=MYDOMAIN\MYSERVER;Database=MY_DATABASE;Trusted_Connection=True;"))
{
String schemaOwner = tableName.Substring(0, 3);

const String sqlScript =
@"BULK
INSERT {0}
FROM 'C:\Users\me\Desktop\{1}\{0}.csv'
WITH
(
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\r\n',
FORMATFILE = 'C:\Users\me\Desktop\{1}\{0}.xml',
DATAFILETYPE='native'
)";

String realQuery = String.Format(sqlScript, tableName, schemaOwner);
connection.Open();

using (SqlTransaction tran = connection.BeginTransaction())
{
using (SqlCommand command = new SqlCommand(realQuery, connection, tran))
{
command.ExecuteNonQuery();
}

tran.Commit();
}
}
}

realQuery的内容是:

BULK
INSERT SCHEMA_OWNER.TABLE
FROM 'C:\Users\me\Desktop\SCHEMA\SCHEMA_OWNER.TABLE.csv'
WITH
(
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\r\n',
FORMATFILE = 'C:\Users\me\Desktop\SCHEMA\SCHEMA_OWNER.TABLE.xml',
DATAFILETYPE='native'
)

编辑

我尝试将 realQuery 变量写入 sql 文件。如果我从 SSMS 执行此操作,则会插入数据。如果我从 .NET 执行 sql 文件,则不会插入数据。这是通过两种方式执行的完全相同的脚本。

String realQuery = String.Format(sqlScript, tableName, schemaOwner);
File.WriteAllLines(@"C:\Users\me\Desktop\temp.sql", new[] { realQuery });
String script = File.OpenText(@"C:\Users\me\Desktop\temp.sql").ReadToEnd();

using (SqlCommand command = new SqlCommand(script, connection, tran))
{
command.ExecuteNonQuery();
tran.Commit();
}

最佳答案

首先运行探查器并准确查看应用程序发送到数据库的内容。届时您可能会发现问题。

此外,在从应用程序发送的上下文中,数据库是否可以访问您的个人 c:drive,或者它是否会查看数据库服务器的 c:drive?通常我从不使用个人位置,而是使用我正在使用的服务器之一。

关于c# - 批量插入未保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246042/

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