关于在VB。NET中怎么使用事务的问题,还有其他几个小问题,谢谢!!!

VCILOVE 2004-07-01 12:46:37
1。关于事务
Dim myReader As SqlDataReader
myReader = myCommand.ExecuteReader()
。。。。。。。。。。。。。。。。。。。这是其他一些操作
然后如果其他操作不成功,则要把前面执行的语句回滚,应该怎么办呢,我想问的是具体的工作过程,谢谢!
2。我把两个表的字段用一个SQL语句读到一个DATASET中,问题是现在有一个字段ID,是两个表都有的,请问,我该怎么区分到底是哪个表的ID字段呢,谢谢!!!
...全文
219 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bafenghan 2005-01-25
  • 打赏
  • 举报
回复
学习
水如烟 2004-07-03
  • 打赏
  • 举报
回复
关于第二个问题,你的SQL语句呢,贴出来才能参考
水如烟 2004-07-03
  • 打赏
  • 举报
回复
你解决了也贴一贴,MSDN的:

可以使用 Connection 和 Transaction 对象启动、提交和回滚事务。下面的步骤用于执行事务。
若要执行事务,请执行下列操作:
调用 Connection 对象的 BeginTransaction 方法来标记事务的开始。BeginTransaction 方法返回对 Transaction 的引用。该引用将分配给登记在事务中的 Command 对象。
将 Transaction 对象分配给要执行的 Command 的 Transaction 属性。如果通过活动的 Transaction 对象对 Connection 执行 Command,但该 Transaction 对象尚未分配给 Command 的 Transaction 属性,则将引发异常。
执行所需的命令。
调用 Transaction 对象的 Commit 方法来完成事务,或调用 Rollback 方法来取消事务。
以下代码示例使用 Microsoft® SQL Server™ 上的 ADO.NET 来演示事务逻辑。
[Visual Basic]
Dim myConnection As SqlConnection = New SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;")
myConnection.Open()

' Start a local transaction.
Dim myTrans As SqlTransaction = myConnection.BeginTransaction()

' Enlist the command in the current transaction.
Dim myCommand As SqlCommand = myConnection.CreateCommand()
myCommand.Transaction = myTrans

Try
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
myCommand.ExecuteNonQuery()
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
myCommand.ExecuteNonQuery()
myTrans.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
Try
myTrans.Rollback()
Catch ex As SqlException
If Not myTrans.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try

Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
Finally
myConnection.Close()
End Try
VCILOVE 2004-07-03
  • 打赏
  • 举报
回复
双击事件还是没有拦截到啊,为什么呢,可能是我错了,帮忙啊,事务的问题解决了,谢谢Edison621
VCILOVE 2004-07-02
  • 打赏
  • 举报
回复
谢谢大家的回答,谢谢,现在我就去试,真的很感谢
Edison621 2004-07-02
  • 打赏
  • 举报
回复
关于事务处理,可以写三个方法:
public class clsDataOperation
{
public static OleDbConnection objConnection=new OleDbConnection();
public static OleDbTransaction objTransaction=null;

public void BeginTrans()
{
if(objConnection.State!=ConnectionState.Open)
objConnection.Open();

objTransaction=objConnection.BeginTransaction();
}

public void CommitTrans()
{
objTransaction.Commit();
objTransaction=null;
}

public void RollbackTrans()
{
objTransaction.Rollback();
objTransaction=null;
}
}
然后在访问数据库是可以把BeginTrans()、CommitTrans() 、RollbackTrans()分别写到try前、try中数据操作代码后、以及catch中。
luyin2002 2004-07-02
  • 打赏
  • 举报
回复
Private Sub dbgXingzhiResult_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dbgXingzhiResult.MouseDown
Dim mPos As Point
Dim hti As System.Windows.Forms.DataGrid.HitTestInfo '定义GataGrid控件的行、列和网格中被单击的部分
mPos.X = e.X
mPos.Y = e.Y
Dim introw As Integer
If e.Button = MouseButtons.Left Then '当在GataGrid控件内按下左键
hti = dbgXingzhiResult.HitTest(e.X, e.Y) '获取鼠标按下时的坐标
If hti.Type = DataGrid.HitTestType.RowHeader Or hti.Column = 2 Then '如果是在行头或第三列时
introw = hti.Row '获取行号
dbgXingzhiResult.UnSelect(dbgXingzhiResult.CurrentRowIndex) '取消原先的当前行号
dbgXingzhiResult.Select(introw) '选中当前选择的行号
dbgXingzhiResult.CurrentRowIndex = introw '将新选的行号做为当前行号

DingdanID = CStr(dbgXingzhiResult.Item(introw, 6)) '取出DataGrid控件当前行号第六列中的定单号

Dim frmDingdanSearch1 As New frmdingdanSearch '新建定单查询对象
frmDingdanSearch1.ShowDialog() '以对话框的形式显示定单查询窗口
End If
End If
End Sub
jiezhi 2004-07-01
  • 打赏
  • 举报
回复
1、写在c#/vb代码中:如
//事务处理
string sql = "...";
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["DSN"].ToString());
conn.Open();
SqlTransaction sqlTran = conn.BeginTransaction();
SqlCommand cmd = conn.CreateCommand();
cmd.Transaction = sqlTran;
try
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();

sql = "...";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();

sqlTran.Commit();
}
catch(Exception e1)
{
try
{
sqlTran.Rollback();
}
catch(SqlException ex)
{
throw ex;
}
throw e1;
}
finally
{
conn.Close();
}
你改成vb的即可。
-------------------------------
2、写在存储过程里面
酋长 2004-07-01
  • 打赏
  • 举报
回复
1.你查点相关的资料看一下就可以了吧
2.你可以在sql语句做处理select a.id as aID,b.id as bID ,......
VCILOVE 2004-07-01
  • 打赏
  • 举报
回复
谢谢你的回答,可是第二个问题还没有解决呢
现在又有这样一个问题,我想在DATAGRID中双击某条记录就出现一个对话框,上面有这条记录的详细信息,但是现在只能通过双击每行的灰色区才能出来,而双击里面的DATASET就不会出现,请问该怎么解决???

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧