C# 检索在一个void中创建的数据列表并在另一个void中显示它

C# 检索在一个void中创建的数据列表并在另一个void中显示它,c#,C#,我有一个关于将数据从一个方法调用到另一个方法的问题 基本上,我的任务是压缩和简化我的代码。在这个场景中,我连接到一个.MDB文件并从中读取1位数据。最初,我在所有需要连接字符串的地方都有连接字符串,但在了解了越来越多的类和内容后,我被告知复制和粘贴是不好的。所以我想把我的连接字符串变成它自己的void,然后用所需的变量调用它。问题是如何返回从数据库检索到的数据列表?这是我现在拥有的代码,它运行良好 string directory = @"C:\"; string[] f

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

基本上,我的任务是压缩和简化我的代码。在这个场景中,我连接到一个.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();
string目录=@“C:\”;
string[]folders=Directory.GetDirectories(目录,“Rameses-*”);
List dataList=新列表();
foreach(文件夹中的字符串foldername)
{
使用(var conction=new System.Data.OleDb.OleDbConnection(“Provider=Microsoft.JET.OleDb.4.0;“+”数据源=“+foldername+”\\Program\\random.mdb;JET-OleDb:Database Password=*******”)
{
conconnect.Open();
var query=“从用户中选择单位”;
var命令=new System.Data.OleDb.OleDbCommand(查询、连接);
var reader=command.ExecuteReader();
while(reader.Read())
{
dataList.Add(读取器[0].ToString());
}
reader.Close();
conconnect.Close();
}
}
错误处理(“加载到选择器的备用配置文件”);
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数据库链接(字符串查询、字符串foldername)
{
List dataList=新列表();
使用(var conction=new System.Data.OleDb.OleDbConnection(“Provider=Microsoft.JET.OleDb.4.0;“+”数据源=“+foldername+”\\Program\\Random.mdb;JET-OleDb:Database Password=**”)
{
conconnect.Open();
var命令=new System.Data.OleDb.OleDbCommand(查询、连接);
var reader=command.ExecuteReader();
while(reader.Read())
{
dataList.Add(读取器[0].ToString());
}
reader.Close();
conconnect.Close();
}
}
//从文件和数据库中检查和加载Ramdata
私有void ramdata_检查(对象发送方,事件参数e)
{
尝试
{
字符串目录=@“C:\”;
string[]folders=Directory.GetDirectories(目录,“Myapp-*”);
List dataList=新列表();
foreach(文件夹中的字符串foldername)
{
数据库链接(“从t_用户中选择u_公司”,文件夹名称);
}
错误处理(“加载到选择器的备用配置文件”);
profselect.DataSource=dataList;
profselect.SelectedText=dataList.Last();
}
抓住
{}

不要使共享连接调用无效:使其创建连接,打开并返回。a将在连接完成时为您关闭连接,因此您无需手动关闭:

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.
    }
}
public-OleDbConnection-OpenConnection()
{
var result=new-OleDbConnection(“此处为我的特殊连接字符串”))
结果:Open()
返回结果;
}
公共列表void DoSomethingWithConnection()
{
使用(var connection=OpenConnection());
{
List dataList=新列表();
OleDbCommand命令=新的OleDbCommand(“DoSomethingHere”,连接);
var reader=command.ExecuteReader();
while(reader.Read())
{
dataList.Add(读取器[0].ToString());
}
返回数据列表;
//当发生以下情况时,连接将自动关闭:
//代码退出using块。
}
}

太好了。我做了一些改动,但你的想法帮了我一把!!谢谢