Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Błąd importu pliku CSV:Wartość kolumny zawierająca ogranicznik kolumny

Słowo ostrzeżenia:nie jestem zwykłym koderem C#.

Ale w każdym razie ten kod wykonuje następujące czynności:

Otwiera plik o nazwie C:\Input.TXT

Przeszukuje każdą linię. Jeśli wiersz ma więcej niż 5 przecinków, wszystkie dodatkowe przecinki są usuwane z trzeciego od końca pola (notatek)

Zapisuje wynik do C:\Output.TXT - to jest ten, który musisz faktycznie zaimportować

Istnieje wiele ulepszeń, które można wprowadzić:

  • Pobierz ścieżki plików z menedżerów połączeń
  • Obsługa błędów
  • Doświadczony programista C# prawdopodobnie mógłby to zrobić w hlaf kodu

Pamiętaj, że Twój pakiet będzie wymagał dostępu do zapisu w odpowiednim folderze

public void Main()
{
    // Search the file and remove extra commas from the third last field
    // Extended from code at
    // http://stackoverflow.com/questions/1915632/open-a-file-and-replace-strings-in-c-sharp
    // Nick McDermaid        

    string sInputLine;
    string sOutputLine;
    string sDelimiter = ",";
    String[] sData;
    int iIndex;

    // open the file for read
    using (System.IO.FileStream inputStream = File.OpenRead("C:\\Input.txt"))
    {
        using (StreamReader inputReader = new StreamReader(inputStream))
        {
            // open the output file
            using (StreamWriter outputWriter = File.AppendText("C:\\Output.txt"))
            {
                // Read each line
                while (null != (sInputLine = inputReader.ReadLine()))
                {
                    // Grab each field out
                    sData = sInputLine.Split(sDelimiter[0]);
                    if (sData.Length <= 6)
                    {
                        // 6 or less fields - just echo it out
                        sOutputLine = sInputLine;
                    }
                    else
                    {
                        // line has more than 6 pieces 
                        // We assume all of the extra commas are in the notes field                                

                        // Put the first three fields together
                        sOutputLine =
                            sData[0] + sDelimiter +
                            sData[1] + sDelimiter +
                            sData[2] + sDelimiter;

                        // Put the middle notes fields together, excluding the delimiter
                        for (iIndex=3; iIndex <= sData.Length - 3; iIndex++)
                        {
                            sOutputLine = sOutputLine + sData[iIndex] + " ";
                        }

                        // Tack on the last two fields
                        sOutputLine = sOutputLine +
                            sDelimiter + sData[sData.Length - 2] +
                            sDelimiter + sData[sData.Length - 1];


                    }

                    // We've evaulted the correct line now write it out
                    outputWriter.WriteLine(sOutputLine);
                }
            }
        }
    }


    Dts.TaskResult = (int)Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success;
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy połączenie wewnętrzne wyklucza duplikaty?

  2. Zapytanie rekurencyjne, w którym kotwica i element członkowski mają związki

  3. Tworzenie bazy danych, tabel, procedur przy użyciu procedury/funkcji składowanej?

  4. Wydajność serwera SQL:co jest szybsze, procedura składowana czy widok?

  5. Transakcja rozproszonej bazy danych a transakcja między bazami danych