1.主体思路
首先将数据库中的数据填充到表(为完成能够再改的时候在dataGridView1中实时表示),然后使用sql代码(insert into 表(属性1,属性2....)values(值1,值2,.......))进行添加。
使用sql代码(Delete from 表 where 条件)删除指定信息。
首先利用二维数组将textBox中的Text与laber进行匹配(一.是为了判断哪些没写哪些写了,二.是为了跟好的准确锁定)然后利用sql代码(update 表 set 属性=值,..... where 条件 ),这里需要注意 字符串需要加双引号(在第一个双引号的里面) 而数字(哪怕是字符串类型数字)不需要加双引号。
使用sql代码读取所有数据库中的数据,利用OleDbDateReader read.HasRows判断是否有行,然后依次将属性列全部填充到表,再然后利用read.Read()来定位到每一行将每一行的信息都填充到表。然后for循环依次判断是否是我要找的。
操作:
1. 用C#与数据库交互,添加,删除,更改,查找。
(1 删除
OleDbConnection oleDb = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\access\StudentManage.mdb");//连接代码 OleDbCommand com = oleDb.CreateCommand(); oleDb.Open(); if(tag != null) { com.CommandText = "Delete from student where 学生编号 = " + tag;//tag是存放编号的变量 com.ExecuteReader();//运行sql命令 com.Dispose();//释放 oleDb.Close();//关闭 MessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); data.Clear(); this.dataGridView1.DataSource = data; } else { MessageBox.Show("删除失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }
(2 添加
int count = 0; OleDbConnection oleDb = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\access\StudentManage.mdb"); OleDbCommand com = oleDb.CreateCommand(); oleDb.Open(); com.CommandText = "Select * from student"; OleDbDataReader read = com.ExecuteReader(); while (read.Read()) { count = (int)read[0]; } count++; com.Dispose(); oleDb.Close(); oleDb.Open(); OleDbCommand com1 = oleDb.CreateCommand(); com1.CommandText = "insert into student(学生编号,姓名,性别,年龄,语文,数学,英语,计算机网络,电话号码,身份证号)values('" + count + "','" + this.textBox1.Text +"','" + this.comboBox1.Text +"','"+ (this.textBox2.Text) + "','"+( this.textBox7.Text) +"','"+ ( this.textBox3.Text) +"','"+ ( this.textBox8.Text) +"','"+ ( this.textBox4.Text )+"','"+ this.textBox9.Text +"','"+ this.textBox5.Text +"')"; com1.ExecuteReader(); MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
(3 更改
//更改 DataColumn column; DataRow row1; private void button2_Click(object sender, EventArgs e) { int[] value = new int[10]; int p = 0; //属性与值匹配 string[,] tag = new string[2, 9] { { this.textBox1.Text, this.comboBox2.Text, this.textBox4.Text, this.textBox5.Text, this.textBox6.Text, this.textBox7.Text, this.textBox8.Text, this.textBox9.Text, this.textBox3.Text }, { this.label2.Text, this.label4.Text, this.label5.Text, this.label6.Text, this.label7.Text, this.label8.Text, this.label9.Text, this.label10.Text, this.label3.Text } }; //更改: update 表 set 属性 = 值 where(可加也可不加) 条件 for (int i = 0; i < 9;i++) { if(tag[0,i] != "") { //存放值 value[p++] = i; } } if(p != 0) { for (int i = 0; i < data.Rows.Count; i++)//遍历表 { for (int j = 0; j < 9; j++)//遍历属性 { column = data.Columns[j]; for (int k = 0; k < p; k++)//遍历有更改的属性 { if (column.ColumnName == tag[1, value[k]])//判断是否相等,并更改 { DataRow row = data.Rows[i]; row[j] = tag[0, value[k]]; } } } } this.dataGridView1.DataSource = data; using (OleDbConnection OleDb = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\access\StudentManage.mdb")) { OleDbCommand com = OleDb.CreateCommand(); OleDb.Open(); for (int j = 0; j < data.Rows.Count; j++) { for (int i = 0; i < p; i++)//遍历有多少要改的属性 { row1 = data.Rows[j]; string str1 = tag[1, value[i]]; string str2 = tag[0, value[i]]; com.CommandText = "update student set " + str1 + "=" + "'" + str2 + "'" + " where 学生编号=" + row1[0]; com.Connection = OleDb; OleDbDataReader read = com.ExecuteReader(); read.Close(); com.Dispose(); } } MessageBox.Show("修改成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { MessageBox.Show("请输入修改的值!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error); }
(4 查找
Button button = sender as Button; OleDbConnection oled = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\access\StudentManage.mdb"); OleDbCommand com = oled.CreateCommand(); oled.Open(); com.CommandText = "Select * from student"; OleDbDataReader read = com.ExecuteReader(); DataTable data = new DataTable(); if(read.HasRows) { for(int i = 0; i < read.FieldCount;i++) { data.Columns.Add(read.GetName(i)); } } switch (button.Text)//依次判断有没有填 { case "姓名": { while (read.Read()) { if(read[1].ToString() == this.textBox1.Text) { DataRow row = data.NewRow(); for(int i = 0;i < read.FieldCount;i++) { row[i] = read[i]; } data.Rows.Add(row); } } this.dataGridView1.DataSource = data; break; } case "年龄": { while (read.Read()) { if (read[3].ToString() == this.textBox2.Text) { DataRow row = data.NewRow(); for (int i = 0; i < read.FieldCount; i++) { row[i] = read[i]; } data.Rows.Add(row); } } this.dataGridView1.DataSource = data; break; } case "性别": { while (read.Read()) { if (read[2].ToString() == this.comboBox1.Text) { DataRow row = data.NewRow(); for (int i = 0; i < read.FieldCount; i++) { row[i] = read[i]; } data.Rows.Add(row); } } this.dataGridView1.DataSource = data; break; } case "电话号码": { while (read.Read()) { if (read[8].ToString() == this.textBox3.Text) { DataRow row = data.NewRow(); for (int i = 0; i < read.FieldCount; i++) { row[i] = read[i]; } data.Rows.Add(row); } } this.dataGridView1.DataSource = data; break; } case "身份证号": { while (read.Read()) { if (read[9].ToString() == this.textBox4.Text) { DataRow row = data.NewRow(); for (int i = 0; i < read.FieldCount; i++) { row[i] = read[i]; } data.Rows.Add(row); } } this.dataGridView1.DataSource = data; break; } } com.Dispose(); oled.Close(); }
2.所遇问题
为了将MessBox信息窗口定时消失(遇到的问题且想了很久)
[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)] private extern static IntPtr FindWindow(string Lp, string Ip); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int PostMessage(IntPtr hw, int msg, IntPtr wp, IntPtr ip); public const int WM_CLOSE = 0x10; //后面的代码需要先调用start 然后起连锁反应 private void start() { Timer time = new Timer(); time.Interval = 1000; time.Tick += new EventHandler(Timer_Tick);//时间到了之后触发 time.Start();//开始计时 } private void Timer_Tick(object sender, EventArgs e) { KillMessageBox();//时间到时将其删去 ((Timer)sender).Stop();//停止计时 } private void KillMessageBox() { IntPtr ptr = FindWindow(null, "提示");//找到窗口句柄 if(ptr != IntPtr.Zero) { PostMessage(ptr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);//删除 } }
惟愿如初