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





5.00/5 (2投票s)
将连接字符串和其他配置变量设置在文件中,并动态访问它们
引言
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
。
关注点
这种方法将有助于消除数据库服务器或应用程序服务器更改时引起的问题。