【问题标题】:C# all database connections in a directoryC# 目录中的所有数据库连接
【发布时间】:2023-03-08 02:03:01
【问题描述】:

我目前有一个目录,里面有很多项目文件夹,每个项目文件夹都包含一个MysqlCE数据库。这些数据库都有相同的表;除了数据之外,它们是相同的。我的目标是显示来自根目录树内每个数据库的 _Users 表的数据。

我在 C# 方面的经验有限,但我相信我可以通过一些研究来实现这一目标。但是,我会很感激任何指示 - 因为将来可能会添加项目文件夹,所以我需要应用程序在每次运行时“扫描”数据库(如果这可能的话)。

这种动态数据库连接可以用 C# 实现吗?我可以在一个 dataGridView 中同时使用多个数据源吗?

【问题讨论】:

  • 不要打开多个连接。 .NET ADO.net 对象被设计为短命的。但是,您可以保留数据库连接字符串的字典。
  • 我认为这种方法不会扩展。一种方法可能是使用 LINQ 将数据库表连接在一起。

标签: c# sdf


【解决方案1】:

我猜你有一个包含多个项目的解决方案,每个项目都有一个 .config 文件,其中放置了连接字符串。您可以为解决方案中的多个项目创建一个共享的 .config 文件,但这有问题: -config 文件必须适用于每个应用程序,如果在一个项目中您需要在 .config 文件中放置一些会破坏其他项目的内容怎么办? 您可以将共享资源用于多个项目,但我认为(我不确定)如果您想更改必须再次编译的值。 反正。要使用资源文件,您可以看到: How to use shared resource file between projects in one solution?

您也可以阅读以下内容: Placing Database Connection Strings in .resx file

对于共享的 .config 文件: Common config file in a multiple-project solution?

【讨论】:

    【解决方案2】:

    T4 模板可以收集数据库的完整路径。

    <#@ template debug="true" hostSpecific="true" #>
        <#@ output extension=".cs" #>
        <#@ Assembly Name="System.Core" #>
    
        <#@ import namespace="System" #>
        <#@ import namespace="System.IO" #>
        <#@ import namespace="System.Collections.Generic" #>
    
        <# 
        string path  = @"~\YourProjectPath";
        List<string> dbFiles = GetDBFilesRecursive(path)
        #>
        //Your class code goes here
        <#+
        public List<string> GetDBFilesRecursive(string path)
        {
    
            List<string> files = new List<string>();
    
            try
            {
                string[] fileEntries = Directory.GetFiles(path);
                foreach (string fileName in fileEntries)
                    files.Add(fileName);
                string [] subdirectoryEntries = Directory.GetDirectories(path);
                foreach(string subdirectory in subdirectoryEntries)
                    files.AddRange(GetDBFilesRecursive(subdirectory));
            }
            catch(Exception e)
            {
                throw new Exception("exception occured in tt gen",e );
            }
            return files;
        }
    #>
    

    【讨论】:

    • 我已经得到了所有数据库路径的列表,我的问题是处理这些数据库中的数据
    • 如果您已经获得了所有数据库路径的列表,为什么还要扫描它们?
    • 我在发布后不久就开始扫描。现在我有了数据库的路径,我不知道如何与它们交互(提取表数据、修改行、添加行)
    • 一个选项是Entity Framework,它有一些不错的教程。
    猜你喜欢
    • 2017-07-08
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多