SqlCommandBuilder 的使用
来源:互联网 发布:pcb电路板设计软件 编辑:程序博客网 时间:2024/05/22 15:12
【转载于新浪博客】blog.sina.com.cn/s/blog_5252e0900100aobl.html
用SqlCommandBuilder 实现批量更新
}
catch(BusinessException errBU)
{
}
catch(Exception err)
{
}
}
*******************************************
再比如如下的方法:
Conn = new SqlConnection(strConn);
string strSql = "SELECT * FROM Categories";
myDataAdapter = new SqlDataAdapter(strSql, Conn);
//创建CommandBuilder对象,该对象可以自动创建用于插入、删除及更新的SQL语句
SqlCommandBuilder myCB = new SqlCommandBuilder(myDataAdapter);
************************************************************************************************
直接调用这个方法就可以啦,说明的一点是select * from "+strTblName是一定要的,
作用大家也应该想到了,主要是告诉 SqlDataAdapter更新哪个表
3.什么时候用?
4.
注意点:
5.优点:
6.缺点:
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
【转载于网易博客】anbangs.blog.163.com/blog/static/32182782008817114528353/
以前都是采用Sql代码用SqlCommand一条一条语句的传入数据库。
但是今天发现有更好的方法。
代码如下:
SqlConnection cn=new SqlConnection(ConStr);
DataSet DS=new DataSet();
SqlDataAdapter Sda=new SqlDataAdapter("Select * from Table1",cn);
try
{
Sda.Fill(DS,"Table1");
MessageBox.Show(DS.Tables[0].Rows.Count.ToString());
}
catch(Exception er)
{
MessageBox.Show(er.Message);
}
//DataSet DS2=DS.Clone();
//Sda.SelectCommand=new SqlCommand("Select * from Table1");
DataRow dr=DS.Tables[0].NewRow();
dr["F1"]=5;
dr["F2"]=5;
dr["F3"]=5;
DS.Tables[0].Rows.Add(dr);
dr=DS.Tables[0].NewRow();
dr["F1"]=6;
dr["F2"]=6;
dr["F3"]=6;
DS.Tables[0].Rows.Add(dr);
SqlCommandBuilder SCB=new SqlCommandBuilder(Sda);
try
{
Sda.Update(DS,"Table1");
}
catch(Exception er)
{
MessageBox.Show(er.Message);
}
Sda.Dispose();
cn.Close();
数据库用的是SQL2000,先在数据库中建立Table1的临时表,建立字段MainID,F1,F2,F3
初始数据如下
MainID F1 F2 F3
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
注意到,我先把数据从数据库中读出来,赋值到DS中
结果显然为4行
然后我在该数据集DS中添加2个同构行
这是注意了,我没有做任何的Insert相关语句
打算直接采用SqlDataAdapter.Update(DataSet,TableScr)方法
但是注意,直接用是不行的,会提示缺少Insert命令的关联
这是可以用了如高亮标记的语句
SqlCommandBuilder SCB=new SqlCommandBuilder(Sda);
这是所有关联就都建立好了,全自动。奇妙,诡异阿
这样就方便多了。
=============================================================
使用SqlCommandBuilder与SqlDataAdapter结合使用,可以方便地去数据库进行更新。只要指定Select 语句就可以自动生成Insert,update,delete语句,
但要注意一点。【Select 语句中返回的列要包括主键列,否则将无法产生Update,和Delete语句】相应的操作将无法执行
【实例1】
public static DataSet SelectSqlSrvRows(string myConnection, string mySelectQuery, string myTableName)
{
SqlConnection myConn = new SqlConnection(myConnection);
SqlDataAdapter myDataAdapter = new SqlDataAdapter();
myDataAdapter.SelectCommand = new SqlCommand(mySelectQuery, myConn);
SqlCommandBuilder cb = new SqlCommandBuilder(myDataAdapter); 【1】
myConn.Open();
DataSet ds = new DataSet();
myDataAdapter.Fill(ds, myTableName);
//code to modify data in DataSet here
//Without the SqlCommandBuilder this line would fail
myDataAdapter.Update(ds, myTableName); 【2】
myConn.Close();
return ds;
}
【实例2】
public partial class DataSet_Delete : System.Web.UI.Page
{
private string strConn = "data source=localhost;initial catalog=Northwind;user id=sa;password=sa";
SqlConnection Conn;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//调用LoadGridView方法以填充和显示数据
LoadGridView();
}
}
private void ConnectionDB()
{
if (Conn == null)
{
//如果SqlConnection对象不存在新建该对象
Conn = new SqlConnection(strConn);
}
if (Conn.State == ConnectionState.Closed)
{
//如果Connection对象的State状态为关闭Closed就将其打开
Conn.Open();
}
}
//创建CloseConnection方法,实现关闭数据库的操作
private void CloseConnection()
{
Conn.Close();
}
//创建LoadGridView方法,实现填充GridView控件以显示数据
private void LoadGridView()
{
string SelectSql = "SELECT * FROM Categories";
ConnectionDB();
SqlDataAdapter myDataAdapter = new SqlDataAdapter(SelectSql, Conn);
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet, "Categories");
CloseConnection();
GVCategory.DataSource = myDataSet.Tables["Categories"];
GVCategory.DataBind();
}
protected void RowDelete(object sender, GridViewDeleteEventArgs e)
{
int CategroyID = Convert.ToInt32(GVCategory.Rows[e.RowIndex].Cells[0].Text);
GVCategory.EditIndex = -1;
ConnectionDB();
string SelectSql = "SELECT * FROM Categories";
SqlDataAdapter myDA = new SqlDataAdapter(SelectSql, Conn);
DataSet DS = new DataSet();
myDA.Fill(DS, "Categories");
CloseConnection();
//创建本地数据表table
DataTable table = DS.Tables["Categories"];
//设置table的PrimaryKey属性,其主键码设置为CategoryID列
table.PrimaryKey = new DataColumn[] { table.Columns["CategoryID"] };
//使用Find方法查找当前进行删除的数据行
DataRow delRow = table.Rows.Find(CategroyID);
//使用Delete方法删除数据行
delRow.Delete();
//创建SqlCommandBuilder对象myCB,它将自动创建DELETE语句
SqlCommandBuilder myCB = new SqlCommandBuilder(myDA);
ConnectionDB();
//使用DataAdapter对象的Update方法将删除数据行后的table表推入到数据库中
myDA.Update(table);
CloseConnection();
//重新载入数据,显示删除数据后的数据表内容
LoadGridView();
}
}
- SqlCommandBuilder 的使用
- SqlCommandBuilder 的使用实例
- SqlCommandBuilder 的使用
- SqlCommandBuilder的运用
- SqlCommandBuilder的运用②
- C# SqlCommandBuilder的用法
- SqlCommandBuilder
- SqlCommandBuilder
- SqlCommandBuilder
- SqlCommandBuilder
- asp.net 中使用sqlcommandbuilder
- asp.net 中使用sqlcommandbuilder
- asp.net中使用sqlcommandbuilder
- asp.net中使用sqlcommandbuilder (转)
- DataGridView使用SqlCommandBuilder批量更新数据
- SqlCommandBuilder 与SQL Adapter结合使用
- SqlCommandBuilder的不足与进化(一)
- SqlCommandBuilder 批量更新数据库的怪异问题?
- ld: symbol dyld_stub_binding_helper not found, normally in crt1.o/dylib1.o/bundle1.o for architectur
- 关于Cookie跨域的问题
- 创建任务需要大量的图形和设计和生产工作
- c# 自定义事件和委托
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现) .
- SqlCommandBuilder 的使用
- Android 读取<meta-data>元素的数据
- Leetcode:Combination Sum II
- 自悟
- SVM入门(一)至(三)Refresh
- rtsp协议总结
- How to write the better Makefile for cpputest
- This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery
- Android StagFright架构分析