2016-08-01 4 views
-1

Это, наверное, непростая задача, но я только делаю свой первый проект vb, поэтому я не уверен, как это сделать на 100%, поэтому извинения в продвинутом, если следующая проблема на самом деле очень просто.Верните максимальный идентификационный номер из базы данных

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

Чтобы объяснить это более четко, каждая запись в базе данных имеет свой собственный идентификационный номер, поэтому мне нужно выполнить итерацию каждой записи и найти номер с наивысшим идентификационным номером и вернуть идентификатор, чтобы затем его можно было использовать в других расчетах.

Я знаю, что могу использовать SQL = SELECT MAX(supportID) FROM tblIncidents, например, для получения наивысшего идентификационного номера, хранящегося в этой таблице.

Итак, как я могу объявить результат этого (так, наивысший идентификационный номер) как переменную, чтобы я мог сначала отобразить его в окне сообщений, чтобы доказать мне, что запрос сработал, а во-вторых, чтобы Я могу использовать переменную как средство использования идентификатора во всем моем коде?

Пример; Это код для сохранения новой записи в таблице tblIncidents.

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 

    Dim incidentSolved As Boolean = False 
    If cboxSolved.Checked Then 
     incidentSolved = True 
    End If 

    If txtClientSave.Text = "" Then 
     MsgBox("Client name cannot be blank") 

    ElseIf rtbProblem.Text = "" Then 
     MsgBox("Problem cannot be blank") 

    ElseIf cboxSolved.Checked = True And rtbSolution.Text = "" Then 
     MsgBox("Please enter solution") 

    Else 
     database.SaveNewIncident(txtClientSave.Text, dtpStart.Value, dtpEnd.Value, rtbProblem.Text, dtpStartTime.Value, dtpEndTime.Value, cboxSolved.Checked, rtbSolution.Text, _con) 

     txtClientSave.Text = "" 
     rtbProblem.Text = "" 
     rtbSolution.Text = "" 
     dtpStart.Value = Date.Today 
     dtpEnd.Value = Date.Today 
     dtpStartTime.Value = DateTime.Now 
     dtpEndTime.Value = DateTime.Now 
     cboxSolved.Checked = False 

    End If 
End Sub 
функция

базы данных, которая называется

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 
     tr = _Con.BeginTransaction() 

     Dim Dc As New OleDbCommand 
     Dc.Connection = _Con 

     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 

     Dc.ExecuteNonQuery() 

     tr.Commit() 

     MsgBox("Save successful") 

    Catch ex As Exception 

     mdInit.errorLog(ex.Message, ex.StackTrace) 
     MsgBox("Failed to save data, refer to error log") 
     tr.Rollback() 

    End Try 

End Function 
+1

Что вы пробовали до сих пор? Кроме того, этот тип логики часто не является хорошим подходом, потому что, что произойдет, если после того, как вы извлечете это значение, новый будет вставлен кем-то другим? –

+0

@SeanLange Привет, Шон, это приложение будет использоваться только одним человеком, поэтому путаницы вставки не произойдет. Причина, по которой мне нужно это сделать, заключается в том, что я написал функцию импорта в программу для перезаписи существующей базы данных на новую, но это означало выключение Identity_Insert в SQL Server. Итак, теперь на моей кнопке сохранения мне нужно получить самый высокий текущий идентификатор и увеличить его, чтобы определить значение, входящее в столбец идентификатора –

+1

Почему бы не вставить строку и использовать предложение OUTPUT? Таким образом, вам не нужно надеяться, что ваша ценность будет одинаковой. –

ответ

0

, что вы можете сделать в VB.net является определение SQLCommand которое потребует подключения SQL прикрепленную к нему - так как ваш запрос возвращает одно значение, вы сможете быть в состоянии выполнить его с ExecuteScalar, чтобы возвращать одно значение Е.Г.

Dim cmd AS New SqlClient.SQLCommand("SELECT MAX(billID) FROM tblRecurring",connectionString) 

затем

cmd.connection.open 

, а затем

dim x as MaxId = cmd.executeScalar 

и закончить с

cmd.connection.dispose 

конечно

+0

Привет, Андрей, строка «Dim x As MaxID» не работает, поскольку maxID не объявляется? –

+0

@joe это должно быть 'Dim x as Integer = cmd.executeScalar' ... – Codexer

Смежные вопросы