Как хранить текстовую информацию в базе данных SQL Server - PullRequest
0 голосов
/ 06 марта 2011

Работа над VS08 C # окном .У меня есть текстовый файл .После прочтения файла мне нужно сохранить информацию о файле в базе данных.Моя 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 ]

2 голосов
/ 06 марта 2011

Разбор файла построчно, чтобы получить необходимую информацию.Используйте System.IO.FileStream или StreamReader для загрузки данных, а затем вы можете обрабатывать их по мере необходимости.Сохраните его в базе данных.

Вот краткий пример использования 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

              }
          }
     }
}
0 голосов
/ 06 марта 2011

Следуя ответу Ричардса,

Мне кажется, вам нужно несколько таблиц.

Таблица 1 может называться ManifestHeader и содержать столбцы 1-6.

Таблица 2 может называться ManifestDetails и содержать столбцы 7 (которые можно разбить на следующие поля, такие как LoadingContainer, DischargeSeal, Dest и т. Д.).

Ваши данные представляют собой смесь фиксированной ширины и запятой(столбец 6), и вы можете использовать String.Substring и String.Split для разделения столбцов ваших строк.

например

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();
        }
    }

}
...