ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库。
现在来通过小案例来了解一下如何通过窗体对数据库进行访问.可以对数据库进行增和查,改和删的操作和增都是差不多的.效果如下:
在这里,为了方便操作以及简单易懂,我在数据库中就只创了一个表,并没有把类别或者国家单独做一张表.
表的信息如下:
- dvdId是编号
- dvdType是类别
- dvdName弟名称
- country是国家
- state是状态
首先,需要拖拽控件制作如下窗体:
每一个控件命好名字,即Name属性,这是为了方便获取控件,由于没有类别表,在这里的combobox的值就没有从数据库获取,就是直接写进去值:
列表就是一个datagridview控件,其他的就是一些简单常见的控件,比如lable,textbox,button,radiobutton以及groupbox.
控件介绍完了之后,把控件属性都改一下,比如控件的Name以及button的Text等细节问题,数据库和布局搞定之后,就可以开始写代码了.
首先需要一个DBHelper类,用于连接数据库以及增删改查的方法.由于我只用到查询和增删改查,我就只写了两个方法.
DBHelper:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Data; 7 using System.Data.SqlClient; 8 9 namespace test 10 { 11 class DBHelper 12 { 13 //创建数据库连接对象 14 private static string ConnString = "server=.;database=DVD;uid=sa;pwd=123456;"; 15 //创建数据库连接字符串 16 private static SqlConnection Conn = null; 17 //初始化数据库连接 18 private static void InitConnection() 19 { 20 if (Conn == null) 21 { 22 Conn = new SqlConnection(ConnString); 23 } 24 if (Conn.State == ConnectionState.Closed) 25 { 26 Conn.Open(); 27 } 28 if (Conn.State == ConnectionState.Broken) 29 { 30 Conn.Close(); 31 Conn.Open(); 32 } 33 } 34 //查询获取DataTable 35 public static DataTable GetDataTable(string sqlStr) 36 { 37 InitConnection(); 38 DataTable table = new DataTable(); 39 SqlDataAdapter dap = new SqlDataAdapter(sqlStr, Conn); 40 dap.Fill(table); 41 Conn.Close(); 42 return table; 43 } 44 //增删改 45 public static bool ExecuteNonQuery(string sqlStr) 46 { 47 InitConnection(); 48 SqlCommand cmd = new SqlCommand(sqlStr, Conn); 49 int result = cmd.ExecuteNonQuery(); 50 Conn.Close(); 51 return result > 0; 52 } 53 } 54 }
连接好数据库之后,就可以写窗体的加载事件,查询按钮的点击事件以及入库按钮的点击事件了:
事件代码:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 12 namespace test 13 { 14 public partial class ListForm : Form 15 { 16 public ListForm() 17 { 18 InitializeComponent(); 19 } 20 21 /// <summary> 22 /// 窗体加载事件 23 /// </summary> 24 /// <param name="sender"></param> 25 /// <param name="e"></param> 26 private void ListForm_Load(object sender, EventArgs e) 27 { 28 //窗体加载时,显示表中信息 29 30 //查询的sql语句 31 string sqlStr = "select dvdType 类别,dvdName 片名,country 国家,case when state = 0 then '未借出' when state = 1 then '已借出' end 状态 from dvdInfo"; 32 DataTable dt = DBHelper.GetDataTable(sqlStr); 33 //dgv_list是你的datagridview命名 34 this.dgv_list.DataSource = dt; 35 } 36 37 /// <summary> 38 /// 入库按钮点击事件 39 /// </summary> 40 /// <param name="sender"></param> 41 /// <param name="e"></param> 42 private void btn_rk_Click(object sender, EventArgs e) 43 { 44 //定义state 45 int state = 0; 46 if (rb_yjc.Checked == true) 47 { 48 state = 1; 49 } 50 else 51 { 52 state = 0; 53 } 54 //插入语句 55 string sqlStr = string.Format("insert into dvdInfo values('{0}','{1}','{2}',{3})", cb_lb.Text, tb_pm.Text, tb_gj.Text, state); 56 //验证是否添加成功 57 if (DBHelper.ExecuteNonQuery(sqlStr)) 58 { 59 MessageBox.Show("添加成功!"); 60 //重新加载窗体 61 ListForm_Load(null, null); 62 } 63 else 64 { 65 MessageBox.Show("添加失败!"); 66 } 67 68 } 69 70 /// <summary> 71 /// 查询按钮点击事件 72 /// </summary> 73 /// <param name="sender"></param> 74 /// <param name="e"></param> 75 private void btn_cx_Click(object sender, EventArgs e) 76 { 77 //查询表中内容,支持模糊查询 78 string sqlStr = string.Format("select dvdType 类别,dvdName 片名,country 国家,case when state = 0 then '未借出' when state = 1 then '已借出' end 状态 from dvdInfo where dvdName like '%{0}%'", tb_cx.Text); 79 DataTable dt = DBHelper.GetDataTable(sqlStr); 80 this.dgv_list.DataSource = dt; 81 } 82 } 83 }
写完事件之后就可以运行试试看了.