自动查找文件,传递到连接字符串并读取

本文关键字:字符 连接 字符串 串并 读取 查找 文件 | 更新日期: 2023-09-27 18:36:48

首先,我只想补充一点,我是 C# 的绝对初学者,我正在尽我所能学习,所以如果这是一个菜鸟问题,我很抱歉,但我遇到了一堵砖墙。

我正在开发一个程序,完成后它会找到.DBF 文件从指定的文件夹中,读取该文件并插入到 mysql 数据库中。我几乎被困在第一个障碍上。

我正在尝试使程序循环访问它找到的每个文件并读取它们。

我似乎无法从 GetFiles() Void 访问文件名字符串。

有没有另一种方法可以将文件名传递给 queryString 而不是自己指定?

这是我的代码 -

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Data.OleDb;

namespace WindowsApplication4
{    
    public partial class Form1 : Form
    {
        public Form1()
        {
                InitializeComponent();
        }
        //OPEN PROGRAM
        private void Form1_Load(object sender, EventArgs e)
        {
            this.richTextBox1.Text = "Waiting for commands...";
            this.toolStripStatusLabel1.Text = "Waiting for commands...";
        }
        // FIND FILES BUTTON CLICK
        private void button1_Click(object sender, EventArgs e)
        {
            this.richTextBox1.Text = "Looking for files...";
            GetFiles();
        }
        // function to read files at source
        private void GetFiles()
        {
            List<String> Myfiles = new List<string>();
            string[] allFiles = System.IO.Directory
            .GetFiles(@"C:'Users'74-des'Desktop'", "*.DBF");
            if (allFiles.Length > 0)
            {
                try
                {
                    foreach (string filename in allFiles)
                    {
                   this.richTextBox1.Text = string.Join(Environment.NewLine,allFiles);
                   string filenameWithoutPath = Path.GetFileName(filename);
                    }
                }
                catch (SystemException excpt)
                {
                    this.richTextBox1.Text = excpt.Message;
                }
            }    
        }
        private void ReadData()
        {    
          this.toolStripStatusLabel1.Text = "Preparing To Read Data";
          this.Refresh();
          DirectoryInfo dir = new DirectoryInfo(@"C:'Users'74-des'Desktop'");
          string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dir + ";Extended Properties=dBase IV";
            string queryString = "SELECT * FROM " + "test4.DBF";
            try
            {
            using (OleDbConnection connection = new OleDbConnection(connectionString))
                {
                    OleDbCommand command = new OleDbCommand(queryString, connection);
                    connection.Open();
                    OleDbDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        if (reader.IsDBNull(1))
                        {
                            this.richTextBox1.Text = "Null";
                        }
                        else
                        {    
                        string DATE = reader.GetValue(0).ToString();
                        string TIME = reader.GetValue(1).ToString();
                        string CODE = reader.GetValue(2).ToString();
                        string item = reader.GetValue(3).ToString();    
                  this.richTextBox1.Text = DATE + TIME + "   " + CODE + " " + item;    
                            this.Refresh();    
                        }
                    }
                    reader.Close();
                    connection.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }    
        private void button2_Click(object sender, EventArgs e)
        {
            ReadData();
        }    
    }
}

自动查找文件,传递到连接字符串并读取

你可以执行以下操作

     using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Text;
        using System.Windows.Forms;
        using System.IO;
        using System.Data.OleDb;

    namespace WindowsApplication4
    {    
public partial class Form1 : Form
    {
        private string mDirectory; // this will hold the directory path you are working on
        private string[] mFiles; // this will hold all files in the selected directory
        public Form1()
        {
            InitializeComponent();
        }
        //OPEN PROGRAM
        private void Form1_Load(object sender, EventArgs e)
        {
            this.richTextBox1.Text = "Waiting for commands...";
            this.toolStripStatusLabel1.Text = "Waiting for commands...";
        }
        // FIND FILES BUTTON CLICK
        private void button1_Click(object sender, EventArgs e)
        {
            this.richTextBox1.Text = "Looking for files...";
            GetFiles();
        }
        // function to read files at source
        private void GetFiles()
        {
            mDirectory = @"C:'Users'74-des'Desktop'"; // better to use OpenFolderDialog to choose the directory
            mFiles = System.IO.Directory.GetFiles(mDirectory, "*.DBF");
            if (mFiles.Length > 0)
            {
                try
                {
                    foreach (string filename in mFiles)
                    {
                        this.richTextBox1.Text = string.Join(Environment.NewLine, mFiles);
                        string filenameWithoutPath = System.IO.Path.GetFileName(filename);
                    }
                }
                catch (SystemException excpt)
                {
                    this.richTextBox1.Text = excpt.Message;
                }
            }
        }
        private void ReadData()
        {
            this.toolStripStatusLabel1.Text = "Preparing To Read Data";
            this.Refresh();
            string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=dBase IV", mDirectory);
            try
            {
                foreach (var file in mFiles)
                {
                    string queryString = string.Format("SELECT * FROM " + "{0}.DBF", System.IO.Path.GetFileNameWithoutExtension(file));
                    using (OleDbConnection connection = new OleDbConnection(connectionString))
                    {
                        OleDbCommand command = new OleDbCommand(queryString, connection);
                        connection.Open();
                        OleDbDataReader reader = command.ExecuteReader();
                        while (reader.Read())
                        {
                            if (reader.IsDBNull(1))
                            {
                                this.richTextBox1.Text = "Null";
                            }
                            else
                            {
                                string DATE = reader.GetValue(0).ToString();
                                string TIME = reader.GetValue(1).ToString();
                                string CODE = reader.GetValue(2).ToString();
                                string item = reader.GetValue(3).ToString();
                                this.richTextBox1.Text = DATE + TIME + "   " + CODE + " " + item;
                                this.Refresh();
                            }
                        }
                        reader.Close();
                        connection.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(mDirectory))
                MessageBox.Show("You should Get Files first!");
            else
                ReadData();
        }
    }
}

希望对您有所帮助