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

时间:2014-04-11 12:20:39

标签: c# xml configuration deserialization xml-deserialization

我正在开发一个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>

5 个答案:

答案 0 :(得分:0)

创建该类

[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>

另外看看

Loading custom configuration files

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

答案 1 :(得分:0)

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;

答案 2 :(得分:0)

使用app config为您的connectionStrings:

<?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;

答案 3 :(得分:0)

你正试图重新发明轮子。

正如人们在此提到的那样,.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。请注意,您要在/ bin中保存.config,而不是在项目文件夹中,因此当您重新运行/重新部署应用程序时,更改将被丢弃。 2.调试时,您不会看到更改,因为VS创建了HOST进程并将新的.config文件复制到/ bin。要查看更改,您应该在不调试的情况下运行。欢呼声。

答案 4 :(得分:0)

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