将文本文件导入SQL表

时间:2009-12-29 16:46:53

标签: c# sql-server

我有一堆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)
{

}

或者我可能会以错误的方式解决这个问题。

2 个答案:

答案 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表中应该相当简单。