65.9K
CodeProject 正在变化。 阅读更多。
Home

从文本文件中读取 Winform 和报表源的连接字符串

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2014年7月14日

CPOL

1分钟阅读

viewsIcon

9585

将连接字符串和其他配置变量设置在文件中,并动态访问它们

引言

Winform 开发人员在部署时面临的主要问题之一是更改应用程序内部已经使用的 connectionstring 和位置指针变量。本教程旨在提供一种替代方法,即将所有这些类型的 connectionstring reportsources 等信息从文本文件中读取。

背景

我正在开发一个应用程序,其中我使用我的生产系统作为 SQL Server,并将所有必需的位置设置在系统中。现在我需要将其部署到多个客户端,他们可能使用分布式服务器或网络文件夹来存储图像和文件。因此,我决定让应用程序从位于 C 驱动器上的文本文件中读取所需的参数和 connectionstrings

Using the Code

我在 Program.CS 中创建了所有必需参数的 public static 变量,并创建了一个类 databasePicker ,用于从文本文件设置这些变量的值。

所以我的 Program.cs 会是这样

static class Program
    {   public static String ConnStr = "";
        public static String OurReportSource = "";
        public static String OurLogSource = "";
        public static String OurImagelocation = "";
        public static String database = "";
        public static String  Server = "";
        public static String dbUsername = "";
        public static String dbPassword = ""; 
 public static int USERPK;
        public static String UserType;
        public static int LOCTNPK;
        public static String UserName;
        public static String LOCATIONCODE;
        public static String EmpName;
        public static DateTime Datetoday=DateTime.Now ;
 public static Transactions.DatabasePicker databasepcker = null;
        public static int usernampk;
[STAThread] 
/// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            databasepcker = new Transactions.DatabasePicker();
 Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            databasepcker.SetConnctionString();
           Application.Run(new MainForm());        
        }  
}

在我的 DatabasePicker 类中,我假设名为 DBKey textfile 将在客户端系统的 C 驱动器上可用,其中包含应用程序所需的所有信息,包括 connectionstring,reportsource、日志文件源、图像位置、文件存储位置等。

如果 DBKey 不存在,将向用户显示一个 filedialog 框,并要求他从任何网络文件夹或位置(USB、CD 等)复制 DB 密钥。

class DatabasePicker
    {
        private const string FILE_NAME = "C:\\DBkey.txt";

        public void SetConnctionString()
        {
            if (!File.Exists(FILE_NAME))
            {
                DialogResult dialogResult = MessageBox.Show(
                    "Database configuration file not found  Do you want to Reset it ? ", 
                    "Database Key not Found", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    OpenFileDialog openFileDialog1 = new OpenFileDialog();

                    openFileDialog1.InitialDirectory = "c:\\";
                    openFileDialog1.Filter = "Text|*.txt|All|*.*";
                    openFileDialog1.RestoreDirectory = true;

                    if (openFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        try
                        {
                            String Sourcefile = openFileDialog1.FileName;
                            File.Copy(Sourcefile, "c:\\DBkey.txt");
                            MessageBox.Show("Data Key Recieved", "Data Key");
                            SetConnctionString();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Error: Could not read file from disk. 
                            Original error: " + ex.Message, "Data Key");
                        }
                    }
                }
                else if (dialogResult == DialogResult.No)
                {
                    Application.Exit();
                }                              
            }

            else
            {
                string line;

                // Read the file and display it line by line.
                System.IO.StreamReader file =
                   new System.IO.StreamReader("c:\\DBkey.txt");

                string[] lines = File.ReadAllLines("c:\\DBkey.txt"); //File is in System.IO
                // for Dubai
                string firstLine = lines[1]; //constring
                string secondline = lines[2]; //reportlocation
                string ThirdLine = lines[3]; //log
                string FourthLine = lines[4]; //images
                string fifthline = lines[5]; //servername
                string sixthline = lines[6]; //databasename
                string seventhline = lines[7]; //userid
                string eightline = lines[8];//password               

                           Program.ConnStr = firstLine;
                Program.OurReportSource = secondline;
                Program.OurLogSource = ThirdLine;
                Program.OurImagelocation = FourthLine;
                Program.Server = fifthline;
                Program.database = sixthline;
                Program.dbUsername = seventhline;
                Program.dbPassword = eightline;
            }
        } 

现在可以使用 static 变量 program ConnStr 从任何地方调用 Connectionstring

关注点

这种方法将有助于消除数据库服务器或应用程序服务器更改时引起的问题。

© . All rights reserved.