不太懂楼主的意思,这是一个SDK的sample,希望对你有帮助:
Dim myConn As New SqlConnection(myConnection)
Dim myDataAdapter As New SqlDataAdapter()
myDataAdapter.SelectCommand = New SqlCommand(mySelectQuery, myConn)
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(myDataAdapter) myConn.Open() Dim ds As DataSet = New DataSet
myDataAdapter.Fill(ds, myTableName)
myDataAdapter.Update(ds, myTableName) myConn.Close()
Dim myConn As New SqlConnection(myConnection)
Dim myDataAdapter As New SqlDataAdapter()
myDataAdapter.SelectCommand = New SqlCommand(mySelectQuery, myConn)
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(myDataAdapter) myConn.Open() Dim ds As DataSet = New DataSet
myDataAdapter.Fill(ds, myTableName)
myDataAdapter.Update(ds, myTableName) myConn.Close()
下面的是直接从数据库拖一个表tbl_unit(unitid 自增标识列,unit 字符型)到表单时自动生成sqlDataAdapter1中的insertCommand命令字符串:
this.sqlInsertCommand1.CommandText=
"INSERT INTO tbl_unit(Unit) VALUES (@Unit); SELECT UnitId, Unit FROM tbl_unit WHERE (UnitId = @@IDENTITY)"注意上面包含:SELECT UnitId, Unit FROM tbl_unit WHERE (UnitId = @@IDENTITY)也就是说,如果当我更新数据集时:
DataSet dsChanges = dataSet11.GetChanges();
sqlDataAdapter1.Update(dsChanges)时,dsChanges.tbl_unit中的字段unitid值(自动增加标识列)同时更新,但如果我用SqlCommandBuilder生成的InsertCommand中却不会包含SELECT UnitId, Unit FROM tbl_unit WHERE (UnitId = @@IDENTITY),也就是如果我更新数据返回数据集dsChanges的话,当中的ID值是没有更新的,所以我就不能通过merge合并dsChanges到表示层得到和源数据一致的结果集。
☆我现在是用多层开发,层与层之间通过DataSet沟通,如果更新后我得到的dsChanges并没有更新,我更新后合并到表示层中的DataSet时,得到的结果也会不正确。
☆我的InsertCommand是在保存数据时通过SqlCommandBuilder生成的,放在数据访问层,所以如果每次更新时,生成命令后都再加上类似SELECT UnitId, Unit FROM tbl_unit WHERE (UnitId = @@IDENTITY)的语句会很不方便,有没有好点的办法?更新数据同时也更新dsChanges中的ID标识列呢?