我有以下方法。执行完成后,我的数据库表中没有数据。 没有异常被抛出/吞噬。奇怪的是,如果我将查询字符串剪切并粘贴到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();
}
答案 0 :(得分:1)
首先运行探查器并查看应用程序发送到数据库的确切内容。你可能会看到问题。
此外,在从应用程序发送的上下文中,数据库是否可以访问您的个人c:驱动器,还是会查看数据库服务器的c:驱动器?一般来说,我从不使用个人位置,而是使用我正在使用的服务器。