Сохранение идентификатора из результата SQL
Я запускаю следующий код, чтобы сказать, существует ли пользователь в базе данных - стандартные вещи. Очевидно, что после запуска кода будет возвращено логическое значение true или false, если будет результат. Если результат найден, я хочу сохранить идентификатор указанного результата. Может кто-нибудь сказать мне, как я мог бы сделать это?
код:
Username = txtUserName.Text
Password = txtPassword.Text
dbConnInfo = "PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source = C:\Users\Dave\Documents\techs.mdb"
con.ConnectionString = dbConnInfo
con.Open()
Sql = "SELECT * FROM techs WHERE userName = '" & Username & "' AND '" & Password & "'"
LoginCommand = New OleDb.OleDbCommand(Sql, con)
CheckResults = LoginCommand.ExecuteReader
RowsFound = CheckResults.HasRows
con.Close()
If RowsFound = True Then
MsgBox("Details found")
TechScreen.Show()
Else
MsgBox("Incorrect details")
End If
1 ответ
Существует много проблем с размещенным вами фрагментом кода. Надеюсь, я могу помочь вам исправить эти проблемы.
Чтобы загрузить идентификатор результата, вам нужно использовать SqlCommand.ExecuteScalar(), так как он оптимизирован для получения одного результата из Sql.
Что касается того, что не так с вашим кодом, вы широко открыты для атак Sql Injection, и вам следует использовать параметризованные запросы, как показано в моем примере ниже.
Public Function AddProductCategory( _
ByVal newName As String, ByVal connString As String) As Integer
Dim newProdID As Int32 = 0
Dim sql As String = _
"INSERT INTO Production.ProductCategory (Name) VALUES (@Name); " _
& "SELECT CAST(scope_identity() AS int);"
Using conn As New SqlConnection(connString)
Dim cmd As New SqlCommand(sql, conn)
cmd.Parameters.Add("@Name", SqlDbType.VarChar)
cmd.Parameters("@Name").Value = newName
Try
conn.Open()
newProdID = Convert.ToInt32(cmd.ExecuteScalar())
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using
Return newProdID
End Function
Источник: MSDN