Oracle txt文件直接使用sqldlr将数据导入到数据库表中

Oracle txt文件直接使用sqlldr将数据导入到数据库表中

    在C#中使用oracle 的sqlldr命令实现txt文件导入到数据库表中,由于最近项目中遇到oracle存储过程定时读取文件的操作,同时DB和应用程序要放在不同的服务器上,出现存储过程无法访问应用程序所在的服务器的文件路径中的文件,就想到了这个方法。

简单的实现代码:

class Program
    {
        static Process p = new Process();
        static void Main(string[] args)
        {
            try
            {
                p.StartInfo.FileName = @"C:\WINDOWS\system32\cmd.exe ";
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.Start();
                p.StandardInput.WriteLine(@"SQLLDR 数据库的用户名/数据库的密码@SID direct=y ROWS=5000 CONTROL=D:/1.CTL DATA=D:/AA/a.TXT LOG=D:/LOG_1.TXT skip=1");
                p.StandardInput.WriteLine("exit");
                p.WaitForExit();
                p.Close();
            }
            catch (Exception ex)
            {  
            }
            finally
            {
                if (p != null)
                {
                    p.Dispose();
                    p = null;
                }
            }

        }

在使用遇到了一个问题,就是在为添加direct=y ROWS=5000时,当文件太大时会出现oracle停止导入了并且应用程序出现假死,但关闭应用程序后他又将数据导入了,经过测试发现,oracle默认的是50个记录点,在rows=5000的前提下,一个记录点存放5000条,也就是说在rows=5000时,能够传输的50*5000条数据,所以当数据量超过该总数时应用程序就会出现假死的现象,然后修改相应的rows后就不会出现假死,并导入成功。

以上只是测试和自己的理解。没有去仔细的学习。

你可能感兴趣的:(oracle,C#)