本以为实验二继续写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语句
try 用于检查发生的异常,并帮助发送任何可能的异常。
catch 以控制权更大的方式处理错误,可以有多个catch子句。
finally 无论是否引发了异常,finally的代码块都将被执行。
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
困死了困死了,晚安。