我有一堆2行(带标题行)'|'分隔的文本文件。我需要将它导入到特定的SQL表中,并且我很难使用该命令。
string sqltable = ("dbo.SLT_C" + "60" + "Staging");
string[] importfiles= Directory.GetFiles(@"K:\jl\load\dest", "*.txt")
SqlConnection con = new SqlConnection("Data Source=" + "Cove" + ";Initial Catalog=" + "GS_Ava_MCase"+ ";Integrated Security=" + "SSPI");
con.Open();
foreach (string importfile in importfiles)
{
}
或者我可能会以错误的方式解决这个问题。
答案 0 :(得分:1)
您可以查看现成的解决方案,例如FileHelpers。这个 FREE 库允许您通过描述文件中字段的类来定义文件的结构,然后您可以轻松地将整个文件加载到该类类型的数组中。
完成后,只需遍历对象,并将它们保存到SQL Server中。
或者查看SQL Bulkcopy选项:
如果你想在“直接”ADO.NET中这样做,请使用类似这样的方法:
string sqltable = "dbo.SLT_C60Staging";
string[] importfiles = Directory.GetFiles(@"K:\jl\load\dest", "*.txt");
// try to wrap your ADO.NET stuff into using() statements to automatically
// dispose of the SqlConnection after you're done with it
using(SqlConnection con = new SqlConnection("Data Source=Cove;Initial Catalog=GS_Ava_MCase;Integrated Security=SSPI"))
{
// define the SQL insert statement and use parameters
string sqlStatement =
"INSERT INTO dbo.YourTable(DateField, TimeField, TextField) VALUES(@Date, @Time, @Text)";
// define the SqlCommmand to do the insert - use the using() approach again
using(SqlCommand cmd = new SqlCommand(sqlStatement, con))
{
// define the parameters for the SqlCommand
cmd.Parameters.Add("@Date", SqlDbType.DateTime);
cmd.Parameters.Add("@Time", SqlDbType.DateTime);
cmd.Parameters.Add("@Text", SqlDbType.VarChar, 1000);
// loop through all files found
foreach (string importfile in importfiles)
{
// read the lines from the text file
string[] allLines = File.ReadAllLines(importfile);
con.Open();
// start counting from index = 1 --> skipping the header (index=0)
for (int index = 1; index < allLines.Length; index++)
{
// split up the data line into its parts, using "|" as separator
// items[0] = date
// items[1] = time
// items[2] = text
string[] items = allLines[index].Split(new char[] { '|' });
cmd.Parameters["@Date"].Value = items[0];
cmd.Parameters["@Time"].Value = items[1];
cmd.Parameters["@Text"].Value = items[2];
cmd.ExecuteNonQuery();
}
con.Close();
}
}
}
这应该有效 - 你的问题太模糊了,无法准确知道行中的数据,以及你需要什么样的SQL插入语句......
答案 1 :(得分:0)
使用文本ODBC驱动程序也可以正常工作。在ODBC管理员中,您可以选择“Microsoft Access文本驱动程序”。它允许您选择分隔符类型。设置数据源后,导入到数据表。从那里,将数据移动到SQL Server表中应该相当简单。