我正在尝试将给定 SQL 数据库表的所有字段动态写入文件,以便稍后用作 BULK INSERT 命令的源文件。
我正在使用 SqlDataReader 来读取将值存储为对象的每个字段。根据对象的类型,我将值写入文件。这是我目前正在使用的代码:
StreamWriter writer = new StreamWriter(filePath, false, Encoding.GetEncoding("iso-8859-1");
foreach (var fields in rows)
{
foreach (object val in fields)
{
if (val != DBNull.Value)
{
if (val is bool)
writer.Write((bool)val ? 1 : 0);
else if (val is byte[])
writer.Write(BitConverter.ToString((byte[])val).Replace("-", ""));
else if (val is DateTime)
writer.Write(string.Format("{0} {1}", ((DateTime)val).ToString("yyyy-MM-dd"), ((DateTime)val).ToString("HH:mm:ss:fff")));
else if (val is string)
writer.Write(((string)val).Replace("\0", string.Empty));
else
writer.Write(val);
}
// Field terminator
writer.Write('\0');
}
}
稍后,我运行 BULK INSERT 命令如下:
BULK INSERT tableName
FROM 'c:\fileName'
WITH (
FIELDTERMINATOR = '\0'
ROWTERMINATOR = '\0'
KEEPNULLS
);
我遇到的问题是有时在批量插入期间出现错误:“文件意外结束”。它不会发生在每一行或每张桌子上。
我希望能够处理具有任何类型数据的任何类型的列而不会出现错误。