例如
Dim cmd As New SQLCommand
cmd.CommandText = "Select Sum(数量) From {订单} Where 日期 > #2012/2/21#"
val = cmd.ExecuteScalar()
cmd.CommandText = "Select Sum(数量) From {订单} Where 日期 > #2009/2/21#"
val = cmd.ExecuteScalar() '没问题!事务,是记录开始和结束点的快照状态。如果中途的sql语句出错,就回滚,与过程的Sql语句顺序无关。
哪怕你写错一个select语句,也会触发回滚
Dim cmd As new SQLCommand
cmd.ConnectionName = "DB" //指定数据源
Try
cmd.CommandText = "Delete From {订单} Where [订单编号] = 32"
cmd.ExecuteNonQuery
cmd.CommandText = "Delete From {订单明细} Where [订单编号] = 32"
cmd.ExecuteNonQuery
cmd.Commit() //提交事务
Catch ex As Exception //如果出错
cmd.Rollback() //则回滚事务
End Trycmd.Parameters.Clear `清空参数
Dim cmd As new SQLCommand
cmd.ConnectionName = "数据源名称"
cmd.CommandText = "Insert Into 订单 (客户, 日期, 订单编号) Values(?,?,?)"
cmd.Parameters.Add("@客户","01")
cmd.Parameters.Add("@日期",Date.Today)
cmd.Parameters.Add("@订单编号",100)
cmd.ExecuteNonQuery
cmd.CommandText = "Insert Into 订单 (客户, 日期, 订单编号) Values(?,?,?)"
cmd.Parameters.Clear //你不清空的话,它会把上面的也继续用!
cmd.Parameters.Add("@客户","01")
cmd.Parameters.Add("@日期",Date.Today)
cmd.Parameters.Add("@订单编号",100)
cmd.ExecuteNonQuery在事务过程里,如果你对表A进行cmd操作,然后还用SQLGroupTableBuilder、SQLCrossTableBuilder对表A进行查询,这时候会因为表锁住了,会出现查询超时
cmd的事务和这些查询工具,不是同一个过程,上锁后不能互相入侵
所以你要手写cmd group语句达到你的目标,而不能偷懒依赖狐表工具。
当然,如果你查询的是表B,由于表B没有上锁,所以是不会出现超时问题的
'...事务开始和前面那些cmd
cmd.CommandText="Select StoreID,Sum(Qty) As Qty,Sum(SendQty) As SendQty From CDOrderDetail Where CDOrderID =? Group By StoreID Order by StoreID"
cmd.Parameters.Clear
cmd.Parameters.Add("@CDOrderID",jt("CDOrderID").ToString)
Dim dt3 As DataTable = cmd.ExecuteReader
'...后面那些cmd和事务结束附加group by 聚合知识:在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中