未将大容量插入保存到数据库
本文关键字:数据库 保存 插入 大容量 | 更新日期: 2023-09-27 18:17:32
我有以下方法。执行完成后,我的数据库表中没有数据。并且没有抛出/吞下异常。奇怪的是,如果我将查询字符串剪切并粘贴到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:驱动器,还是可以查看数据库服务器的c:驱动器?一般来说,我从不使用个人位置,而是使用我正在使用的服务器之一。