muchener's blogs

C#连接mysql数据库

字数统计: 1.1k阅读时长: 4 min
2016/05/13 Share

本以为实验二继续写sql语句,结果一看竟然是 C/S 结构的数据库编程,要用c#连接数据库,不开心,宝宝越陷越深了。

按照实验步骤上的到了添加控件 DataGridView,属性处选datasourse添加数据源,看到这呵呵了,并没有mysql数据源。

怎么办呢,代码实现喽。然后我就去百度了一下c#连接mysql,再加上全神的建议还是选择了用[connector/net(点击下载)]安装时要记住安装目录,后边会用到。

添加图中的dll文件就和连接sqlserver没区别了。

双击form1,在头部添加引用using MySql.Data.MySqlClient;

作业中操作dataGridView使用的是控件绑定的方式,这里既然不能使用控件绑定那就代码实现吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void Form1_Load(object sender, EventArgs e)
{
//连接字符串
string MyConnectionString = "Server = localhost;Database = dbtest1;Uid = root;Pwd = root;";
//建立一个数据库连接实例并配置连接
MySqlConnection connection = new MySqlConnection(MyConnectionString);
//打开数据库连接
connection.Open();
//创建一个新的命令
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = connection;
cmd.CommandText = "select * from teacher";
MySqlDataAdapter mda = new MySqlDataAdapter(cmd.CommandText, connection);
DataSet mds = new DataSet();
//填充和绑定数据
mda.Fill(mds);
dataGridView1.DataSource = mds.Tables[0].DefaultView;
//关闭连接
connection.Close();
}

当然这里可以使用try……catch(MySqlException ex)具体知道一些具体的错误原因。

第二题:拖一个button,点击在box中显示指定的表。(我是一只复制粘贴的汪)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void btnSummit_Click(object sender, EventArgs e)
{
string MyConnectionString = "Server = localhost;Database = dbtest1;Uid = root;Pwd = root;";
//建立一个数据库连接实例并配置连接
MySqlConnection connection = new MySqlConnection(MyConnectionString);
//打开数据库连接
connection.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = connection;
cmd.CommandText = "select * from teacher";
cmd.CommandType = CommandType.Text;
MySqlDataReader sdr = cmd.ExecuteReader();
//循环读取输出
while (sdr.Read())
{
richTextBox1.Text += sdr[0].ToString() + "\t" + sdr[1].ToString() + " " +
sdr[2].ToString() + "\t" + sdr[3].ToString() + "\t" + sdr[4].ToString() + "\n" ;
}
connection.Close();
}

最后在来说一下try……catch语句

  1. try 用于检查发生的异常,并帮助发送任何可能的异常。

  2. catch 以控制权更大的方式处理错误,可以有多个catch子句。

  3. finally 无论是否引发了异常,finally的代码块都将被执行。

  4. throw 用于引发异常,可引发预定义异常和自定义异常。

一般格式

1
2
3
4
5
6
7
8
9
10
11
12
try  
{
程序代码块;
}
catch(Exception ex)
{
异常处理代码块;
}
finally
{
无论是否发生异常均执行的代码块;
}

拿上边的例子来说,如上边的代码,我将localhost删一个字母再去执行程序,啊哦!竟然无法执行。

看错误提示可知他说没有做异常处理。当我们输入错误的账号密码一类到时无法正常连接到数据库时,不做异常处理,程序会认为你已经正确连接数据库而会顺序向下执行下边的语句,这时候找不到连接对象程序就会报错,为了避免这种情况发生,我们就会使用try catch语句进行异常处理。

以一dataGridView显示数据用为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private void Form1_Load(object sender, EventArgs e)
{
//连接字符串
string MyConnectionString = "Server = localhost;Database = dbtest1;Uid = root;Pwd = root;";
try
{
//建立一个数据库连接实例并配置连接
MySqlConnection connection = new MySqlConnection(MyConnectionString);
//打开数据库连接
connection.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = connection;
cmd.CommandText = "select * from teacher";
MySqlDataAdapter mda = new MySqlDataAdapter(cmd.CommandText, connection);
DataSet mds = new DataSet();
//填充和绑定数据
mda.Fill(mds);
dataGridView1.DataSource = mds.Tables[0].DefaultView;
//关闭连接
connection.Close();
}
catch (MySqlException ex)
{
switch (ex.Number)
{
case 0:
MessageBox.Show("不能连接到数据库服务器"); break;
default:
MessageBox.Show(ex.Message); break;
}
}
}
//这个ex具体的错误号我也不太清楚,总之能查看错误就好了。

这里提供设置参数有误时的执行示例

异常处理是做了,可是这个异常处理真的考虑到了全部情况吗?当然没有,不过我自己觉得不是太严重所以就不写了。又看一遍代码,发现错误可能会出现在.open()后一条语句到.close()之间发生错误就无法执行.close()这时候数据库连接就不会关闭,怎么解决这个问题呢????

然后我就百度了一下,随便找了个解决这个问题的文章http://blog.sina.com.cn/s/blog_8abeac5b0100zf5x.html

困死了困死了,晚安。

CATALOG
  1. 1. 最后在来说一下try……catch语句