本次实例采用了DataAdapter获得数据库中的数据,然后用Fill方法对DataSet进行数据填充,对DataSet进行数据的添加、修改、删除等操作,最后通过当前DataSet中的数据更新数据库中的数据,从而达到数据的操作。
1、 数据库创建
简单的创建了一个表,名为LogInfo,记录ID,Pwd的信息,如图1。
图1
2、 界面创建
拉1个DataGridView、2个Label、2个TextBox、4个Button控件到窗口,分别命名为dgvLogInfo、lbID、lbPwd、tbID、tbPwd、btInsert、btDelete、btModify、btUpdata,如图2。
图2
2、 定义一个中介数据集DataSet
DataSet为公共变量,以供各种操作使用,最后通过一个提交操作,将DataSet的数据操作更新到数据库中。
DataSet ds = new DataSet();
3、数据的获得
定义一个获得数据并显示在DataGridView窗口的方法DataGet,如下
privatevoid DataGet()
{
SqlConnectioncn = new SqlConnection(Properties.Settings.Default.查询修改删除练习ConnectionString);
SqlDataAdapterda =newSqlDataAdapter("select * from LogInfo", cn);
cn.Open();
da.Fill(ds, "Log_Info");
cn.Close();
dgvLogInfo.DataSource = ds.Tables["Log_Info"]; //绑定数据源
}
4、数据的添加操作
将TextBox中的数据添加到DataSet,定义方法DataInsert,如下
privatevoid DataInsert()
{
DataRow dr = ds.Tables["Log_Info"].NewRow();
dr["ID"]= tbID.Text;
dr["Pwd"]= tbPwd.Text;
ds.Tables["Log_Info"].Rows.Add(dr);
}
5、数据的删除操作
将鼠标所在的当前行删除的方法为DataDelete,如下
privatevoid DataDelete()
{
if(dgvLogInfo.CurrentRow !=null)
{
intRowIndex = dgvLogInfo.CurrentRow.Index;
ds.Tables["Log_Info"].Rows.RemoveAt(RowIndex);
}
}
6、数据的修改操作
让TextBox中的数据修改当前鼠标所在行的数据,方法如下
privatevoid DataModify()
{
int RowIndex = dgvLogInfo.CurrentRow.Index;
dgvLogInfo.CurrentRow.Cells["ID"].Value = tbID.Text;
dgvLogInfo.CurrentRow.Cells["Pwd"].Value = tbPwd.Text;
}
7、数据的更新操作
DataSet是暂留在内存中的数据,起到了前端与数据库进行交互的中介作用,SqlDataAdapter的Fill方法把从数据库中取得的数据放到DataSet中,对数据的操作不是直接对数据库的操作(减少了和数据库交互的次数),所以以上的操作都是对DataSet进行的操作,需要一个方法把DataSet中的数据更新到数据库中。方法如下
privatevoid DataUpdate()
{
SqlConnection cn =new SqlConnection(Properties.Settings.Default.查询修改删除练习ConnectionString);
string sql= "DELETE FROM LogInfo";
SqlCommand cmd= new SqlCommand(sql,cn);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
for(int i = 0; i < ds.Tables["Log_Info"].Rows.Count; i++)
{
sql = "INSERT LogInfo(ID,Pwd) VALUES(@ID,@Pwd)";
cmd = newSqlCommand(sql, cn);
cmd.Parameters.Add("@ID",SqlDbType.NVarChar,8).Value = ds.Tables["Log_Info"].Rows[i]["ID"];
cmd.Parameters.Add("@Pwd",SqlDbType.NVarChar,8).Value = ds.Tables["Log_Info"].Rows[i]["Pwd"];
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
ds.Tables["Log_Info"].Clear();
DataGet();
MessageBox.Show("数据提交成功!");
}
8、界面的交互
将DataGet放入到Load中,将DataGet()、DataDelete()、DataModify()、DataUpdate()各方法分别放入各对应Button中。最终运行程序如图3所示。
图3
附:程序完整代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Csharp与Sql的连接
{
public partial class Form1 : Form
{
DataSet ds = new DataSet();
//数据显示
private void DataGet()
{
SqlConnection cn =new SqlConnection(Properties.Settings.Default.查询修改删除练习ConnectionString);
SqlDataAdapter da =new SqlDataAdapter("select * from LogInfo", cn);
cn.Open();
da.Fill(ds, "Log_Info");
cn.Close();
dgvLogInfo.DataSource = ds.Tables["Log_Info"]; //绑定数据源
}
//对DataSet进行添加数据操作
privatevoid DataInsert()
{
DataRow dr = ds.Tables["Log_Info"].NewRow();
dr["ID"]= tbID.Text;
dr["Pwd"]= tbPwd.Text;
ds.Tables["Log_Info"].Rows.Add(dr);
}
//对DataSet进行删除数据操作
privatevoid DataDelete()
{
//鼠标点到GridView里的删除数据
if(dgvLogInfo.CurrentRow !=null)
{
intRowIndex = dgvLogInfo.CurrentRow.Index;
ds.Tables["Log_Info"].Rows.RemoveAt(RowIndex);
}
}
//对DataSet进行修改数据操作
privatevoid DataModify()
{
int RowIndex = dgvLogInfo.CurrentRow.Index;
dgvLogInfo.CurrentRow.Cells["ID"].Value = tbID.Text;
dgvLogInfo.CurrentRow.Cells["Pwd"].Value = tbPwd.Text;
}
//对数据库进行更新数据操作
privatevoid DataUpdate()
{
SqlConnection cn =new SqlConnection(Properties.Settings.Default.查询修改删除练习ConnectionString);
string sql= "DELETE FROM LogInfo";
SqlCommand cmd= new SqlCommand(sql,cn);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
for(int i = 0; i < ds.Tables["Log_Info"].Rows.Count; i++)
{
sql = "INSERTLogInfo(ID,Pwd) VALUES(@ID,@Pwd)";
cmd = new SqlCommand(sql, cn);
cmd.Parameters.Add("@ID",SqlDbType.NVarChar,8).Value = ds.Tables["Log_Info"].Rows[i]["ID"];
cmd.Parameters.Add("@Pwd",SqlDbType.NVarChar,8).Value = ds.Tables["Log_Info"].Rows[i]["Pwd"];
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
ds.Tables["Log_Info"].Clear();
DataGet();
MessageBox.Show("数据提交成功!");
}
privatevoid btInert_Click(objectsender,EventArgs e)
{
DataInsert();
}
privatevoid btDel_Click(objectsender,EventArgs e)
{
DataDelete();
}
privatevoid btModify_Click(objectsender,EventArgs e)
{
DataModify();
}
privatevoid btUpdate_Click(objectsender,EventArgs e)
{
DataUpdate();
}
publicForm1()
{
InitializeComponent();
}
privatevoid Form1_Load(objectsender,EventArgs e)
{
// TODO:This line of code loads data into the 'dS.LogInfo' table. You can move, orremove it, as needed.
this.logInfoTableAdapter.Fill(this.dS.LogInfo);
DataGet();
}
}
}