如何在数据库SQL Server中存储文本信息

时间:2011-03-06 04:34:41

标签: c# .net text windows

使用 VS08 C#窗口。我有 txt文件。读完文件后,我需要将文件信息存储在数据库中。我的 SQL Server 数据库表结构如下:

CREATE TABLE [dbo].[StoreTxtValues]
(
  [PortCode] [int] (80) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  1)[Vessel] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  2)[Voyage] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  3)[Sailed] [datetime] NOT NULL,
  4)[Carrier] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,  
  5)[LoadingContainer] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,  
  6)[DischargeSeal] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  7)[rowValue] [varchar] (8000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

)

1),2),3),4),5),6),7)

请在图片中查看这些数字。我需要帮助来存储我描述的数据。任何建议都将被接受。提前谢谢。

2 个答案:

答案 0 :(得分:2)

逐行解析文件以获取所需信息。使用System.IO.FileStreamStreamReader加载数据,然后您可以根据需要进行处理。将其保存到数据库中。

以下是使用here中的StreamReader的快速示例。

using (StreamReader sr = new StreamReader(path))   
{  
    while (sr.Peek() >= 0)   
    {  
        string lineFromFile = sr.ReadLine();  
        //now parse the string lineFromFile and get the information you need  
    }  
} 

我可能会补充一点,创建对象来表示您需要存储的各种数据可能会有所帮助。然后,该对象可以更容易地处理数据,将其保存到数据库等。

解析字符串(这假定文件的格式完全相同,即相同的信息行)。

跟踪你在哪条线上。

string[] myFile = File.ReadAllLines(@"C:\file.txt");

var lineCount = myFile.Length;

     for(i=0; i<lineCount; i++)  
     {
          switch(i)
          {
               case 0:
                   //parse line 0
                   break;
               case 1:
                   //parse line 1
                   break;
               case 2:
                   //parse line 2
                   break;
               //and so on until you get to the line that begins the regular "records" part of the file
          }

          if(i >= 10) //assumes line 10 is where the regular "records" start
          {
              //parse the record like so
              string[] columns = myFile[i].Split('\t'); //this assumes your columns are separated by a tab. If it's a space you would use myFile[i].Split(' '), etc. 
              //now you have an array with all your columns
              foreach(string column in columns)
              {
                   //now do what you want with the information

              }
          }
     }
}

答案 1 :(得分:-1)

关于理查兹的回答,

在我看来,你需要多个表格。

表1可能被称为ManifestHeader并包含1-6列。

表2可能被称为ManifestDetails并包含第7列(可以分解为其他字段,例如LoadingContainer,DischargeSeal,Dest等)。

您的数据是固定宽度和逗号分隔的混合(第6列),您可以使用String.Substring和String.Split来分隔行列。

e.g。

using System;
using System.Collections.Generic;
using System.IO;
using System.Collections;

public class MyClass
{
    public static void ProcessFile()
    {
        TextReader textReader = new StreamReader(@"C:\DEV\DATA\MyDataFile.txt");
        string s = textReader.ReadLine();  
        string col1 = s.Substring(9, 29).Trim();  

        s = textReader.ReadLine();  
        string col2 = s.Substring(9, 29).Trim();  

        s = textReader.ReadLine();  
        string col3 = s.Substring(9, 29).Trim();  

        s = textReader.ReadLine();  
        string col4 = s.Substring(9, 29).Trim();


        s = textReader.ReadLine();
        s = textReader.ReadLine();
        s = textReader.ReadLine();
        s = textReader.ReadLine();
        s = textReader.ReadLine();
        s = textReader.ReadLine();

        s = textReader.ReadLine();  
        string col5 = s.Split(",")[0].Trim();
        string col6 = s.Split(",")[1].Trim();

        while ((s = textReader.ReadLine()).Trim() != "")
        {
            string LoadingContainer = s.Substring(0, 10).Trim();  
            string DischargeSeal = s.Substring(13, 23).Trim();  
            string Dest  = s.Substring(25, 25).Trim();
            // Parse further colums here...
            // Insert record into the database
        }
    }

    public static void Main()
    {
        try
        {
            ProcessFile();
        }
        catch (Exception e)
        {
            string error = string.Format("---\nThe following error occurred while executing the program:\n{0}\n---", e.ToString());
            Console.WriteLine(error);
        }
        finally
        {
            Console.Write("Press any key to continue...");
            Console.ReadKey();
        }
    }

}