将大文本文件读入SQL Server存储过程

时间:2014-10-21 14:13:52

标签: c# sql-server

我必须阅读并将文本放入SQL Server表中。

我最初开始使用BULK INSERT,但我遇到的问题是我现在没有对文件进行编码,因此BULK有时会输出一些错误。

然后,我选择通过C#控制台应用程序,并且一切正常,除非我有大文件。大约300-400 MB,我没有任何问题,但在此之上,我收到了OOM错误。

这是我的代码:

static void Main()
    {
        string fullFileName = @"C:\Temp\410.4604";
        string FileName = System.IO.Path.GetFileName(fullFileName);
        string table = FileName.Substring(0, 3);
        Console.WriteLine("Iniciou às: " + inicio);

        DataTable data = new DataTable();
        data.Clear();
        data.Columns.Add("Text");
        using (System.IO.FileStream fs = System.IO.File.Open(fullFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read))
        using (System.IO.BufferedStream bs = new System.IO.BufferedStream(fs))
        using (StreamReader sr = new StreamReader(bs))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                data.Rows.Add(line);
            }
        }

        var conn = new System.Data.SqlClient.SqlConnection(myConn);
        SqlCommand insertCommand = new SqlCommand(myProc, conn);
        insertCommand.CommandTimeout = 0;
        insertCommand.CommandType = CommandType.StoredProcedure;
        SqlParameter insParam1 = insertCommand.Parameters.AddWithValue("@data", data);
        insParam1.SqlDbType = SqlDbType.Structured;
        SqlParameter insParam2 = insertCommand.Parameters.AddWithValue("@table", table);

        conn.Open();
        insertCommand.ExecuteNonQuery();
        conn.Close();

        data.Clear();
        data = null;
        GC.Collect();

        Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();

    }

有什么想法吗?或建议改善这个? 非常感谢

0 个答案:

没有答案