Тест на пустую ячейку доступа БД VB. net? - PullRequest
1 голос
/ 28 апреля 2020

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

Что-то вроде SELECT FirstNameColumn FROM tableNames WHERE LastNameColumn = "Smith", и проверить, имеет ли значение FirstNameColumn значение.

Я использую VB. net, с OleDB и базой данных доступа.

1 Ответ

2 голосов
/ 28 апреля 2020

Если у вас был какой-то код, который извлек запись, и некоторые значения в строке могли бы быть нулевыми:

Public Sub ReadMyData(ByVal connectionString As String)
    Dim queryString As String = "SELECT FirstNameColumn FROM tableNames WHERE LastNameColumn = 'Smith'"
    Using connection As New OleDbConnection(connectionString)
        Dim command As New OleDbCommand(queryString, connection)

        connection.Open()

        Dim reader As OleDbDataReader = command.ExecuteReader()
        While reader.Read()


            If Not reader.IsDbNull(0) Then 
               Console.WriteLine(reader.GetString(0))
            End If

        End While

        reader.Close()
    End Using
End Sub

DataReader имеет метод IsDBNull, который сообщит вам, есть ли ячейка в строке нулевой.

Действительно, использование DataReader - это действительно низкий уровень и довольно тяжелая работа. Есть много более простых способов использовать базу данных. Следующим шагом в разумных пределах может быть Dataadapter и datatable, предлагающий аналогичную функцию:

 Dim da as New OleDbDataAdapter("SELECT FirstNameColumn FROM tableNames WHERE LastNameColumn = 'Smith'", connStr)  
 DataTable dt = new DataTable()  
 custDA.Fill(dt)  

 For Each ro as DataRow in dt.Rows
   If Not ro.IsNull("FirstNameColumn") Then
     Console.WriteLine(ro("FirstNameColumn"))
   End If
 Next ro

TableAdapters другой уровень абстракции, удаляет все ужасные обращения с именами строковых столбцов, среди прочего:

 Dim ta as New PersonTableAdapter
 Dim dt as PersonDataTable = ta.GetData()
 For Each ro in dt
   If Not ro.IsFirstNameColumnNull() Then
     Console.WriteLine(ro.FirstNameColumn)
   End If
 Next ro

Entity Framework, вероятно, эквивалентно высокого уровня, возможно, выше:

Dim p as Person = context.Person.Where(Function(x) x.LastName = "Smith")
If p.FirstNameColumn Is Not Nothing Then
  Console.WriteLine(p.FirstNameColumn)
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...