Отображение автономера из MySQL в текстовом поле с Visual Basic

#mysql #vb.net #ado.net #textbox

#mysql #vb.net #ado.net #текстовое поле

Вопрос:

Это для программы продажи билетов службы поддержки, которую я создаю:

Когда пользователь нажимает, чтобы запустить тикет, я хочу иметь возможность отображать автономер из mysql, который соответствует текущему заполняемому тикету, чтобы пользователь мог отслеживать свой тикет позже. У меня все настроено, но я не слишком уверен, как я могу отобразить идентификатор билета в текстовом поле.

Прямо сейчас у меня есть так, что выполняется запрос для получения следующего идентификационного номера билета при загрузке формы, но я не уверен, как отобразить его в виде текста в текстовом поле.

     'QUERY FOR NEW ID TICKET NUMBER   
Private Sub Suggestions_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Dim idQuery As String = "SELECT MAX(itID) 1 AS Expr1 FROM(TableName)"

    With cmd
        .Connection = conn
        .CommandText = idQuery
        .CommandType = CommandType.Text
    End With

    Try
        conn.Open()
        cmd.ExecuteNonQuery()
        conn.Close()
        Me.Close()
    Catch ex As Exception
        MsgBox(ex.ToString)
        conn.Close()
    End Try
  

Теперь мне удалось изменить его на это, но я все еще зависаю, потому что я не уверен, правильно ли это:

 Dim conn As New MySqlConnection(connStr)
Dim cmd As New MySqlCommand()
Dim Reader As MySqlDataReader
Dim submitteddate As String

'QUERY FOR NEW ID TICKET NUMBER   
Private Sub Suggestions_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Try
        Dim idQ As String = "INSERT INTO tblit (itID, ersBugIssue, ersSubject, ersBugCategory, ersBugDate, ersBugSubmittedby, ersBugOrHelp )" amp; _
                                "VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL);"
        Dim cmd As new SQLCommand()
        With cmd
            .Connection = conn
            .CommandText = idQ
        End With

        conn.Open()
        cmd.ExecuteNonQuery()
        cmd.CommandText = "SELECT LAST_INSERT_ID() as NewTicketID"
        Dim Reader As SqlDataReader = cmd.ExecuteReader()
        Reader.Read()
        MsgBox(Reader("NewTicketID"))
        Reader.Close()

        conn.Close()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
End Sub
  

Ответ №1:

"SELECT MAX(itID) 1 AS Expr1 FROM(TableName)"

Это плохая идея, вы очень быстро столкнетесь с проблемами параллелизма.
Вместо этого вы должны выполнить следующие инструкции SQL.

 INSERT INTO tablename (ID, morefields) 
  VALUES (NULL, real_values_or_place_holders);
SELECT LAST_INSERT_ID() as NewTicketID;
-- After the ticket is complete
UPDATE tablename SET morefields = <thedata> WHERE id = NewTicketID 

-- If the ticket gets cancelled:
DELETE FROM tablename WHERE id = NewTicketID
  

Если вы сделаете это так, вы никогда не столкнетесь с проблемами с дублированием или неправильной TicketID выдачей.

Если вы выполняете a select , вы не можете сказать, что это не запрос.

Используйте следующий код

 Dim cmd As New SqlCommand()
cmd.Connection = conn
cmd.CommandText = "SELECT LAST_INSERT_ID() AS NewTicketID"
Dim reader As SqlDataReader = cmd.ExecuteReader()
reader.Read
MsgBox(reader("NewTicketID"))
  

Комментарии:

1. ‘ExecuteReader’ не является членом ‘String’ — это синтаксическая ошибка, которую я получаю

2. Кроме того, я понимаю, что сначала мне нужно вставить значения null, а затем я могу их обновить, но вы потеряли меня, когда добрались до раздела «использовать следующий код»

3. I have to insert null values at first and then I can update them after правильно, сначала вставьте нули, а затем select last_insert_id() обновите (или удалите). Показанный фрагмент кода предназначен для выбора.

4. @MDL, они неверны. Ознакомьтесь с официальными документами (и примерами в них) here:msdn.microsoft.com/en-us/library /… и вот: msdn.microsoft.com/en-us/library /…