SqlCommandBuilder在用SqlDataReader更新数据源时的作用
2012-05-17 10:32
387 查看
用于将对
DataSet
所做的更改与关联的 SQL Server
数据库的更改相协调。
SqlDataAdapter
不会自动生成实现 DataSet
的更改与关联的 SQL Server
实例之间的协调所需的 Transact-SQL
语句。但是,如果设置了 SqlDataAdapter
的
SelectCommand
属性,则可以创建一个 SqlCommandBuilder
对象来自动生成用于单表更新的 Transact-SQL
语句。然后,SqlCommandBuilder
将生成其他任何未设置的 Transact-SQL
语句。
关于如何向数据库传数据,以前我的数据都是采用Sql代码用SqlCommand一条一条语句的传入数据库。但是现在将SqlCommandBuilder与SqlDataAdapter结合使用,可以方便地去数据库进行更新。只要指定Select
语句就可以自动生成Insert,update,delete语句,但要注意一点。Select
语句中返回的列要包括主键列,否则将无法产生Update,和Delete语句
构造函数
public SqlCommandBuilder (SqlDataAdapter adapter)
使用关联的 SqlDataAdapter
对象初始化
SqlCommandBuilder
类的新实例。
示例:将SqlCommandBuilder与SqlDataAdapter结合使用,对数据库进行更新
查询tb_command表中的所有数据并显示在DataGridView中,单击某条数据会显示其详细信息。当对某条数据修改后,单击修改按钮,将调用SqlDataReader对象的update方法更新数据源。
namespace UpdateDataSet
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection conn;
//声明一个SqlConnection变量
DataSet ds;
//声明一个DataSet变量
SqlDataAdapter sda;
//声明一个SqlDataAdapter变量
private void Form1_Load(object sender, EventArgs e)
{
//实例化SqlConnection变量conn,连接数据库
conn = new SqlConnection("server=.;database=db_14;uid=sa;pwd=911013");
//创建一个SqlCommand对象
SqlCommand cmd = new SqlCommand("select * from tb_command", conn);
sda = new SqlDataAdapter(); //实例化SqlDataAdapter对象
sda.SelectCommand = cmd;
//设置SqlDataAdapter对象的SelectCommand属性为cmd
ds = new DataSet();
//实例化DataSet
sda.Fill(ds, "tb_command"); //使用SqlDataAdapter对象的Fill方法填充DataSet
dataGridView1.DataSource = ds.Tables[0];//设置dataGridView1控件的数据源
}
private void button1_Click(object sender, EventArgs e)
{
DataTable dt = ds.Tables["tb_command"]; //创建一个DataTable
sda.FillSchema(dt, SchemaType.Mapped); //把表结构加载到tb_command表中
一定不能少。当 SqlDataAdapter
填充 DataSet
时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。但是,除非
MissingSchemaAction
属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用
FillSchema,让 SqlDataAdapter
创建 DataSet
的架构,并在用数据填充它之前就将主键信息包括进去。将SqlCommandBuilder与SqlDataAdapter结合使用,可以方便地去数据库进行更新。只要指定Select
语句就可以自动生成Insert,update,delete语句,但要注意一点。Select
语句中返回的列要包括主键列,否则将无法产生Update,和Delete语句
DataRow dr = dt.Rows.Find(txtNo.Text); //创建一个DataRow
//设置DataRow中的值
dr["姓名"] = txtName.Text.Trim();
dr["性别"] = this.txtSex.Text.Trim();
dr["年龄"] = this.txtAge.Text.Trim();
dr["奖金"] = this.txtJJ.Text.Trim();
//实例化一个SqlCommandBuilder
SqlCommandBuilder cmdbuider = new SqlCommandBuilder(sda);
//调用其Update方法将DataTable更新到数据库中
sda.Update(dt);
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
//在dataGridView1控件的CellClick事件中实现单击某条数据显示详细信息
txtNo.Text = dataGridView1.SelectedCells[0].Value.ToString();
txtNo.ReadOnly = true;
txtName.Text = dataGridView1.SelectedCells[1].Value.ToString();
txtSex.Text = dataGridView1.SelectedCells[2].Value.ToString();
txtAge.Text = dataGridView1.SelectedCells[3].Value.ToString();
txtJJ.Text = dataGridView1.SelectedCells[4].Value.ToString();
}
}
}
DataSet
所做的更改与关联的 SQL Server
数据库的更改相协调。
SqlDataAdapter
不会自动生成实现 DataSet
的更改与关联的 SQL Server
实例之间的协调所需的 Transact-SQL
语句。但是,如果设置了 SqlDataAdapter
的
SelectCommand
属性,则可以创建一个 SqlCommandBuilder
对象来自动生成用于单表更新的 Transact-SQL
语句。然后,SqlCommandBuilder
将生成其他任何未设置的 Transact-SQL
语句。
关于如何向数据库传数据,以前我的数据都是采用Sql代码用SqlCommand一条一条语句的传入数据库。但是现在将SqlCommandBuilder与SqlDataAdapter结合使用,可以方便地去数据库进行更新。只要指定Select
语句就可以自动生成Insert,update,delete语句,但要注意一点。Select
语句中返回的列要包括主键列,否则将无法产生Update,和Delete语句
构造函数
public SqlCommandBuilder (SqlDataAdapter adapter)
使用关联的 SqlDataAdapter
对象初始化
SqlCommandBuilder
类的新实例。
示例:将SqlCommandBuilder与SqlDataAdapter结合使用,对数据库进行更新
查询tb_command表中的所有数据并显示在DataGridView中,单击某条数据会显示其详细信息。当对某条数据修改后,单击修改按钮,将调用SqlDataReader对象的update方法更新数据源。
namespace UpdateDataSet
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection conn;
//声明一个SqlConnection变量
DataSet ds;
//声明一个DataSet变量
SqlDataAdapter sda;
//声明一个SqlDataAdapter变量
private void Form1_Load(object sender, EventArgs e)
{
//实例化SqlConnection变量conn,连接数据库
conn = new SqlConnection("server=.;database=db_14;uid=sa;pwd=911013");
//创建一个SqlCommand对象
SqlCommand cmd = new SqlCommand("select * from tb_command", conn);
sda = new SqlDataAdapter(); //实例化SqlDataAdapter对象
sda.SelectCommand = cmd;
//设置SqlDataAdapter对象的SelectCommand属性为cmd
ds = new DataSet();
//实例化DataSet
sda.Fill(ds, "tb_command"); //使用SqlDataAdapter对象的Fill方法填充DataSet
dataGridView1.DataSource = ds.Tables[0];//设置dataGridView1控件的数据源
}
private void button1_Click(object sender, EventArgs e)
{
DataTable dt = ds.Tables["tb_command"]; //创建一个DataTable
sda.FillSchema(dt, SchemaType.Mapped); //把表结构加载到tb_command表中
一定不能少。当 SqlDataAdapter
填充 DataSet
时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。但是,除非
MissingSchemaAction
属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用
FillSchema,让 SqlDataAdapter
创建 DataSet
的架构,并在用数据填充它之前就将主键信息包括进去。将SqlCommandBuilder与SqlDataAdapter结合使用,可以方便地去数据库进行更新。只要指定Select
语句就可以自动生成Insert,update,delete语句,但要注意一点。Select
语句中返回的列要包括主键列,否则将无法产生Update,和Delete语句
DataRow dr = dt.Rows.Find(txtNo.Text); //创建一个DataRow
//设置DataRow中的值
dr["姓名"] = txtName.Text.Trim();
dr["性别"] = this.txtSex.Text.Trim();
dr["年龄"] = this.txtAge.Text.Trim();
dr["奖金"] = this.txtJJ.Text.Trim();
//实例化一个SqlCommandBuilder
SqlCommandBuilder cmdbuider = new SqlCommandBuilder(sda);
//调用其Update方法将DataTable更新到数据库中
sda.Update(dt);
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
//在dataGridView1控件的CellClick事件中实现单击某条数据显示详细信息
txtNo.Text = dataGridView1.SelectedCells[0].Value.ToString();
txtNo.ReadOnly = true;
txtName.Text = dataGridView1.SelectedCells[1].Value.ToString();
txtSex.Text = dataGridView1.SelectedCells[2].Value.ToString();
txtAge.Text = dataGridView1.SelectedCells[3].Value.ToString();
txtJJ.Text = dataGridView1.SelectedCells[4].Value.ToString();
}
}
}
相关文章推荐
- SqlDataAdapter可以用SqlCommandBuilder 实现批量更新
- SqlDataAdapter SqlCommandBuilder update 批量更新
- 用SqlCommandBuilder 实现批量更新
- SqlDataAdapter.Update()方法与SqlCommandBuilder(转)
- Use SqlDataAdapter to update database, but SqlCommandBuilder required
- 用SqlCommandBuilder 实现批量更新
- 转贴:用SqlCommandBuilder 实现批量更新
- SqlDataAdapter和SqlCommandBuilder添加数据
- SqlDataReader查询,更新,删除并保持和数据库实时操作
- DataTable通过SqlCommandBuilder自动更新解决办法
- SqlDataAdapter和SqlCommandBuilder添加数据
- ASP.net:用SqlCommandBuilder 实现批量更新
- SqlDataAdapter和SqlCommandBuilder删除数据
- SqlDataAdapter.Update()方法与SqlCommandBuilder
- C# SqlCommandBuilder封装DRUD命令,更新数据库
- 用SqlCommandBuilder 实现批量更新
- .net 用SqlCommandBuilder 实现数据库批量更新
- SqlDataAdapter和SqlCommandBuilder删除数据
- 用SqlCommandBuilder 实现批量更新
- 用SqlCommandBuilder 实现批量更新