Оператор SQL-транзакции в vb.net

sql sql-server vb.net tsql sqltransaction

430 просмотра

1 ответ

0 Репутация автора

Я делаю проект, который связан с Microsoft SQLServer, используется для ввода, удаления, редактирования данных о клиентах и ​​заказах. Полная система работает, однако мне посоветовали использовать транзакции, а не обычные операторы SQL для добавления / удаления / редактирования данных и т. Д.

Проблема в том, что я не использовал их раньше, и из своих исследований за последние несколько часов я не могу понять, как их начать.

Кто-нибудь может посоветовать мне, как превратить следующий код в транзакцию?

    Public Shared Function SaveNewPerson(ByVal firstName As String, lastName As String, ByVal age As Integer, ByVal postcode As String, m_cn As OleDbConnection)

    Dim Dc As New OleDbCommand
    Dc.Connection = m_cn

    m_cn.Open()

    Dc.CommandText = "INSERT INTO tblPerson([firstName], [lastName], [age], [postcode]) VALUES('" & firstName & "', '" & lastName & "', '" & age & "', '" & postcode & "')"

    Dc.ExecuteNonQuery()

    Dim personID As Integer

    Dc.CommandText = "SELECT @@IDENTITY"
    Dc.CommandType = CommandType.Text
    personID = CType(Dc.ExecuteScalar(), Integer)

    m_cn.Close()

End Function
Автор: user6579928 Источник Размещён: 18.07.2016 01:03

Ответы (1)


0 плюса

1594 Репутация автора

Решение

Я только что изучил TSQL, посмотрите, будет ли этот код работать для вас (обратите внимание, что вам нужно Dim tr(с другим именем переменной, если хотите) и использовать его в нескольких местах, но в отличие от некоторых языков, которые вы не используете Не нужно настраивать объекты для разных методов.

  Public Shared Function SaveNewIncident(ByVal clientName As String, dateStart As Date, dateEnd As Date, ByVal incidentProblem As String, ByVal timeStart As String, ByVal timeEnd As String,
                                       ByVal incidentSolved As Boolean, ByVal incidentSolution As String, _con As OleDbConnection)

    Dim tr As OleDbTransaction = Nothing

    Try

        Dim Dc As New OleDbCommand
        Dc.Connection = _con

        tr = _con.BeginTransaction()

        Dc.CommandType = CommandType.Text
        Dc.CommandText = "INSERT INTO dbo.tblIncidents VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"
        Dc.Transaction = tr
        Dc.Parameters.Add("@clientName", OleDbType.VarChar).Value = clientName
        Dc.Parameters.Add("@dateStart", OleDbType.Date).Value = dateStart
        Dc.Parameters.Add("@dateEnd", OleDbType.Date).Value = dateEnd
        Dc.Parameters.Add("@incidentProblem", OleDbType.LongVarChar).Value = incidentProblem
        Dc.Parameters.Add("@timeStart", OleDbType.VarChar).Value = timeStart
        Dc.Parameters.Add("@timeEnd", OleDbType.VarChar).Value = timeEnd
        Dc.Parameters.Add("@incidentSolved", OleDbType.Boolean).Value = incidentSolved
        Dc.Parameters.Add("@incidentSolution", OleDbType.LongVarChar).Value = incidentSolution

         Dim personID As Integer

        Dc.CommandText = "SELECT SCOPE_IDENTITY() AS personID"
        Dc.CommandType = CommandType.Text
        personID = CType(Dc.ExecuteScalar(), Integer)

        tr.Commit()

    Catch ex As Exception

        tr.Rollback()

        Throw
    End Try

End Function
Автор: David Размещён: 18.07.2016 03:09
Вопросы из категории :
32x32