使用c#Windows窗体在xml文件中读取/写入数据库连接字符串

本文关键字:数据库连接 字符串 读取 窗体 c#Windows xml 文件 使用 | 更新日期: 2023-09-27 17:57:58

我正在开发一个c#应用程序,需要在其中从oracle数据库服务器获取数据。在我的应用程序中,我不想制作一个硬编码的连接字符串,因为有时我们必须将它与不同的DB连接(出于测试目的,它具有相同的模式)。

为此,我有一个计划,我创建了一个xml文件和一个新表单(具有管理员权限)。使用该表单,我在xml文件中更新/插入数据库凭据,或使用app.config,但问题是我不知道如何以预定义的方式读取和写入xml文件(与连接字符串的方式相同)。

你能帮我创建新的xml文件吗?或者有什么更好的想法吗?

这个代码怎么样?

public static string ClientName, DbType, ConnectionString;
        static DB()
        {
            try
            {
                DataTable Dt = new DataTable("Settings");
                DataColumn Client = new DataColumn("Client", typeof(string));
                DataColumn DataBaseType = new DataColumn("DataBaseType", typeof(string));
                DataColumn ConString = new DataColumn("ConnectionString", typeof(string));
                Dt.Columns.Add(Client);
                Dt.Columns.Add(DataBaseType);
                Dt.Columns.Add(ConString);
                Dt.ReadXml(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "''Settings.xml");
                DB.ClientName = Dt.Rows[0]["Client"].ToString();
                DB.DbType = Dt.Rows[0]["DataBaseType"].ToString();
                DB.Port = Dt.Rows[0]["Port"].ToString();
                DB.ConnectionString = Dt.Rows[0]["ConnectionString"].ToString();
            }
            catch(Exception ex)
             {
            // Exception message
             }

xml文件代码为

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
    <Settings>
        <Client>DSCL</Client>
        <DataBaseType>ORACLE</DataBaseType>
            <ConnectionString>providerName=system.data.oracleclient;User ID=****;password=****;Data Source=*****;Persist Security Info=True;Provider=OraOLEDB.Oracle;</ConnectionString>
  </Settings>
</DocumentElement>

使用c#Windows窗体在xml文件中读取/写入数据库连接字符串

创建该类

[Serializable()]
public class Car
{
    [System.Xml.Serialization.XmlElement("StockNumber")]
    public string StockNumber { get; set; }
    [System.Xml.Serialization.XmlElement("Make")]
    public string Make { get; set; }
    [System.Xml.Serialization.XmlElement("Model")]
    public string Model { get; set; }
}

[Serializable()]
[System.Xml.Serialization.XmlRoot("CarCollection")]
public class CarCollection
{
    [XmlArray("Cars")]
    [XmlArrayItem("Car", typeof(Car))]
    public Car[] Car { get; set; }
}

反序列化函数:

CarCollection cars = null;
string path = "cars.xml";
XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));
StreamReader reader = new StreamReader(path);
cars = (CarCollection)serializer.Deserialize(reader);
reader.Close();

还有稍微调整过的xml(我需要添加一个新元素来包装…Net对反序列化数组很挑剔):

<?xml version="1.0" encoding="utf-8"?>
<CarCollection>
<Cars>
  <Car>
    <StockNumber>1020</StockNumber>
    <Make>Nissan</Make>
    <Model>Sentra</Model>
  </Car>
  <Car>
    <StockNumber>1010</StockNumber>
    <Make>Toyota</Make>
    <Model>Corolla</Model>
  </Car>
  <Car>
    <StockNumber>1111</StockNumber>
    <Make>Honda</Make>
    <Model>Accord</Model>
  </Car>
</Cars>
</CarCollection>

还可以看看

加载自定义配置文件

http://www.codeproject.com/Articles/32490/Custom-Configuration-Sections-for-Lazy-Coders

使用连接的应用程序配置Strings:

<?xml version="1.0" encoding="utf-8" ?>
 <configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
 <connectionStrings>
    <add name="MyDatabase" connectionString="......"/>
 </connectionStrings>
</configuration>

在应用程序中添加对System.Configuration的引用,并通过获取连接字符串

string connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

App.Config:

<configuration>     
  <connectionStrings>
    <add name="connstring1"
        connectionString="DataSource=123.123.123.123;UserID=XXX;Password=XXX;" />
  </connectionStrings>     
</configuration>

C#代码:

var appConfig = ConfigurationManager.OpenExeConfiguration("your.exe");
string connectionstring = appConfig.ConnectionStrings.ConnectionStrings["connstring1"].ConnectionString;

您正试图重新发明一个轮子。

正如人们在这里提到的,.config文件用于应用程序配置。其中有一个专门用于连接字符串的部分,因此建议您使用它,因为它是标准且方便的。

这是您的配置:

<configuration>
....
<connectionStrings>
    <add name="OracleConnectionString" connectionString="providerName=system.data.oracleclient;User ID=****;password=****;Data Source=*****;Persist Security Info=True;Provider=OraOLEDB.Oracle;" providerName="System.Data.OracleClient" />
</connectionStrings>
</configuration>

下面是修改它的代码片段:

string user = "Me";
string pwd = "qwerty";
Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConnectionStringsSection section = (ConnectionStringsSection)cfg.GetSection("connectionStrings");
var currentConnectionString = section.ConnectionStrings["OracleConnectionString"];
currentConnectionString.ConnectionString = string.Format("providerName=system.data.oracleclient;User ID={0};password={1};Data Source=*****;Persist Security Info=True;Provider=OraOLEDB.Oracle;", user, pwd);
cfg.Save();
ConfigurationManager.RefreshSection("connectionStrings");

注:1。请注意,您将.config保存在/bin中,而不是项目文件夹中,因此当您重新运行/重新部署应用程序时,所做的更改将被丢弃。2.在调试时,您不会看到VS创建HOST进程并将新的.config文件复制到/bin时发生的更改。若要查看更改,应在不进行调试的情况下运行。干杯

使用您的值创建一个数据表。做Dt.WriteXml(文件名);它将生成xml文件。将来维护这个xml。使用Dt.ReadXml(文件名)在应用程序中获取值。