我有一个大约 1.2 GB 的制表符分隔文本文件,我需要使用 c# 将其转换为 CSV 文件(逗号分隔)。我必须将批量数据插入到 sqlserver 中,数据在 txt 文件中,该文件是制表符分隔的,但我希望它先转换为 CSV 然后插入到 sql server 中,或者有什么合适的方法可以将制表符分隔的数据插入sql server 数据库高效。
5 回答
将制表符分隔文件导入 Excel(或其他电子表格程序),然后将其导出为 CSV。
SQL Server 2005 中的 BULK INSERT 命令默认使用制表符作为字段分隔符,因此无需将制表符分隔的文本文件转换为 csv 格式。
事实上,将其转换为真正的 csv 会使事情变得更加困难。BULK INSERT 不会将引号视为字符串分隔符,因此真正的 csv 文件在字符串中的某处用逗号封装字符串的真正 csv 文件将中断导入。
有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/ms188365(v=sql.90).aspx。
如果您使用的是 sqlserver,您应该看看 SSIS(SqlServer 集成服务)。此工具将帮助您以有效的方式导入 csv 文件。您可以在此工具中配置分隔符,因此无需将制表符替换为逗号。
我想出了这个在制表符上分开的:
using(System.IO.StreamReader rdr = new System.IO.StreamReader(@"C:\text.txt"))
{
int counter = 0;
string lne;
while((lne = rdr.ReadLine()) != null)
{
string[] temp = lne.Split('\t');
Console.WriteLine(temp[0]);
Console.WriteLine(temp[1]);
counter++;
}
}
Console.ReadLine();
之后,您可以使用 StringBuilder 用逗号连接数组中的项目。
如果它的 SQl Server 2005 及更高版本,请右键单击要导入的数据库并选择Tasks然后Import Data。指向您的制表符分隔文件,然后浏览剩余的屏幕。在最后一个屏幕上,就在您实际导入之前,您可以选择将其保存为SSIS 包(复选框)。这是迄今为止最简单、快速和有效的方式(无需从制表符分隔到 csv 的转换)无需编写任何代码即可导入它,并且该代码也可在向导结束时使用,可用于自动执行任务,如果需要。