未将大容量插入保存到数据库

本文关键字:数据库 保存 插入 大容量 | 更新日期: 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:驱动器?一般来说,我从不使用个人位置,而是使用我正在使用的服务器之一。