今天写的多线程没有起到多线程的目的,速度并没有起来。只能靠写博客来排解心中的郁闷了。
今天写的东西之前博客也略微提及了,那就是连接数据库,然后传递数据库工作空间。今天自己再详细记述一下C#连接Oracle数据库。我尽可能说的清楚!
日常使用主要分三步:连接数据库、到主窗体、分发出去。
1、连接数据库其中一种方法:采用窗体控件来输入参数连接。
背后的代码如下:
public partial class LinkServerDatabaseForm : Form
{//传参委托
public delegate void saveOracleConnection(OracleConnection _conn);
OracleConnection conn = new OracleConnection();
saveOracleConnection soc;
//--------负责传递工作空间--------注意括号内的内容saveOracleConnection _soc--------和下文又呼应-------
public LinkServerDatabaseForm(saveOracleConnection _soc)
{
InitializeComponent();
soc = _soc;
}
private void linkButton_Click(object sender, EventArgs e)
{
string dataBaseAddress = addressTextBox.Text.Replace(" ","");//去掉空格
string sid = sidTextBox.Text.Replace(" ", "");
string userName = nameTextBox.Text.Replace(" ", "");
string password = passwordTextBox.Text.Replace(" ", "");
string connString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + dataBaseAddress + ")(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=" + sid + ")));Persist Security Info=True;User ID=" + userName + ";Password=" + password + ";";//连接字符串
conn = new OracleConnection(connString);
try
{
conn.Open();//打开连接
soc(conn);//保存连接
MessageBox.Show("数据库连接成功","提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception err)
{
MessageBox.Show("数据库连接失败:"+err.Message,"错误", MessageBoxButtons.OK ,MessageBoxIcon.Error);
}
}
}
2、其他窗体想调用这个连接conn怎么办呢?
这是主窗体MainForm.cs,当我们点击数据库连接,弹出上一步骤数据库连接的窗口。这时候需要就需要把conn传递到MainForm.cs中。具体代码:
public partial class MainForm : Form
{
public OracleConnection conn = new OracleConnection();//数据库连接,数据库相关操作请使用此连接
private void linkServerDatabase_Click(object sender, EventArgs e)
{//------显示窗体------------此时已经传递空间从_conn到conn中------此时的conn已经变成主窗体Form中的全局变量了---------
LinkServerDatabaseForm lsdf = new LinkServerDatabaseForm(saveOracleConnection);
lsdf.Show();
}
//这儿saveOracleConnection可以省略,直接在LinkServerDatabaseForm(OracleConnection _conn)
//为了防止出错,还是建议这样写
void saveOracleConnection(OracleConnection _conn)
{
conn = _conn;
toolStripStatusLabel1.Text = "数据库已连接";
}
}
3、这时候需要处理数据用到这个conn了,那该怎么办呢?
//首先是点击数据处理-------以下代码还在主窗体中--------
private void button2_Click(object sender, EventArgs e)
{
ConnectionState connState= conn.State;
if(connState== ConnectionState.Open)
{//数据库已经打开
//传递conn
testForm sref = new testForm(conn);
sref.Show();
}
else
{
MessageBox.Show("数据库未打开", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//其次就是显示数据处理窗口了testForm
背后的代码就是接收主窗体传递过来的conn
public partial class testForm : Form
{
OracleConnection conn = new OracleConnection();
//这儿就是接受主窗体conn的OracleConnection _conn
public testForm(OracleConnection _conn)
{
InitializeComponent();
conn = _conn;
}
}
这样就完成了传递。
日常的开发大概就是这么三个部分,有些讲的不明白地方还请指教。我个人觉得比较难的地方就是,如何把连接数据库的窗体内容传递到主窗体这一步。当然也有别的方法,比如我上一篇博客,就直接把连接写在主窗体中,也是值得借鉴的方法。