Introduction
We can use INI file to auto generate the database connection string.
Background
It can be used in Webform and winForm.
Using the code
using System;
using System.Resources;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.IO;
using System.Data;
namespace www.treaple.com
{
public class DBBase
{
public string hostName = null;
public string baseName = null;
public string loginName = null;
public string passWord = null;
public DBBase()
{
}
}
public class DBConnectioin : DBBase
{
private INI ini;
public static string conStr = null;
public DBConnectioin()
{
ini = new INI();
}
private void Read()
{
ini.GetPara();
this.hostName = ini.hostName;
this.baseName = ini.baseName;
this.loginName = ini.loginName;
this.passWord = ini.passWord;
}
public void Write()
{
ini.hostName = this.hostName;
ini.baseName = this.baseName;
ini.loginName = this.loginName;
ini.passWord = this.passWord;
ini.SetPara();
}
public void GetConString()
{
this.Read();
conStr = "workstation id=" + this.hostName + ";data source=" + this.hostName + ";initial catalog=" + this.baseName + ";user id=" + this.loginName + ";password=" + this.passWord;
}
}
public class INI : DBBase
{
protected string path = null;
protected string fileName = "Config.ini";
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
public INI()
{
this.path = Directory.GetCurrentDirectory();
}
private bool Write(string section, string key, string value)
{
try
{
WritePrivateProfileString(section, key, value, this.path + "\\" + this.fileName);
return true;
}
catch
{
return false;
}
}
private string Read(string section, string key)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(section, key, "", temp, 255, this.path + "\\" + this.fileName);
return temp.ToString();
}
public void GetPara()
{
this.hostName = Read("Info", "HostName");
this.baseName = Read("Info", "baseName");
this.loginName = Read("Info", "LoginName");
this.passWord = Read("Info", "PassWord");
}
public void SetPara()
{
Write("Info", "HostName", this.hostName);
Write("Info", "baseName", this.baseName);
Write("Info", "LoginName", this.loginName);
Write("Info", "PassWord", this.passWord);
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace www.treaple.com
{
public partial class Form1 : Form
{
DBConnectioin dBConnectioin = new DBConnectioin();
public Form1()
{
InitializeComponent();
}
private void btnSetStr_Click(object sender, EventArgs e)
{
dBConnectioin.hostName = txtHostName.Text.Trim();
dBConnectioin.baseName = txtBaseName.Text.Trim();
dBConnectioin.loginName = txtLoginName.Text.Trim();
dBConnectioin.passWord = txtPassWord.Text.Trim();
dBConnectioin.Write();
}
private void btnGetStr_Click(object sender, EventArgs e)
{
dBConnectioin.GetConString();
txtConStr.Text = DBConnectioin.conStr;
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.
Process.Start("http://www.treaple.com/Contact_Us.htm");
}
}
}
Alireza DavoudianPosted Jan 15, 2015, 3:55 PM
Thank you indeed! this is what I was exactly looking for! :-)
xuPosted Apr 20, 2009, 11:37 PM
Thanks a lot ! firs ,my english is very poor second,your method is better than my,i haven't write into INI for the connection of my programs. thrid,I want to ask you a question . I have two tables ,they are different in their structural ,and there primary key is different ,can I use like this: dataset1.merge(dataset2,true,missionschemaaction.addwithkey)? when I write like this,my dataset1 doesn't change,why?
Mohammad JahangeerPosted Mar 31, 2009, 5:56 AM
i'll tell u aftr check