检索在一个空白中创建的数据列表,并将其显示在另一个空白

本文关键字:空白 列表 另一个 显示 数据 创建 一个 检索 | 更新日期: 2023-09-27 18:27:49

我有一个关于将数据从一个方法调用到另一个方法的问题。

基本上,我的任务是压缩和简化我的代码。在这个场景中,我连接到一个.MDB文件并从中读取1位数据。最初,我在所有需要它的地方都有连接字符串,但在了解了越来越多关于类和其他东西之后,我被告知复制和粘贴是不好的。所以我想取我的连接字符串,使其成为……它自己的void,然后用所需位置的变量调用它。问题是如何返回从数据库检索到的数据列表?这是我现在拥有的代码,它运行良好。

string directory = @"C:'";
            string[] folders = Directory.GetDirectories(directory, "Rameses-*");
            List<string> dataList = new List<string>();
            foreach (string foldername in folders)
            {
                using (var conection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + "data source=" + foldername + "''Program''random.mdb;Jet OLEDB:Database Password=******"))
                {
                    conection.Open();
                    var query = "Select u_company From t_user";
                    var command = new System.Data.OleDb.OleDbCommand(query, conection);
                    var reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        dataList.Add(reader[0].ToString());
                    }
                    reader.Close();
                    conection.Close();
                }
            }
            error_handling(" Alternate Profiles Loaded into Selector");
            profselect.DataSource = dataList;
            profselect.SelectedText = dataList.Last();

但我原以为我可以把连接从它的当前位置上取下来,然后做这样的事情,但现在我无法从初始连接中获取数据列表。有什么建议吗?

        //Database Connection Base Function
    public static void database_link(string query, string foldername)
    {
        List<string> dataList = new List<string>();
        using (var conection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + "data source=" + foldername + "''Program''Random.mdb;Jet OLEDB:Database Password=****"))
        {
            conection.Open();
            var command = new System.Data.OleDb.OleDbCommand(query, conection);
            var reader = command.ExecuteReader();
            while (reader.Read())
            {
                dataList.Add(reader[0].ToString());
            }
            reader.Close();
            conection.Close();
        }
    }
    // Ramdata check and load from files and database
    private void ramdata_check(object sender, EventArgs e)
    {
        try
        {
            string directory = @"C:'";
            string[] folders = Directory.GetDirectories(directory, "Myapp-*");
            List<string> dataList = new List<string>();
            foreach (string foldername in folders)
            {
                database_link("Select u_company From t_user", foldername);
            }
            error_handling(" Alternate Profiles Loaded into Selector");
            profselect.DataSource = dataList;
            profselect.SelectedText = dataList.Last();
        }
        catch
{}

检索在一个空白中创建的数据列表,并将其显示在另一个空白

不要让共享连接调用为void:让它创建连接,打开并返回。使用块会在连接完成时为您关闭连接,这样您就不需要手动关闭它:

public OleDbConnection OpenConnection()
{
      var result = new OleDbConnection("My special connection string here"))
     result.Open()
     return result;
 }
public List<string> void DoSomethingWithConnection()
 {
    using (var connection = OpenConnection());
    {
        List<string> dataList = new List<string>();
        OleDbCommand command = new OleDbCommand("DoSomethingHere", connection);
        var reader = command.ExecuteReader();
        while (reader.Read())
        {
            dataList.Add(reader[0].ToString());
        }
        return dataList;
    // The connection is automatically closed when the 
    // code exits the using block.
    }
}