vbnet中从sql数据库中检索位列

vbnet中从sql数据库中检索位列,sql,database,vb.net,bit,Sql,Database,Vb.net,Bit,我遇到了一个问题,在我的数据库中,有一个列是0或1位,指定用户是管理员还是帐户已挂起。在我的VB代码中,我试图检索该位。示例代码: Dim dtRequests As DataTable dtRequests = New DataTable("Users") dtRequests.Columns.Add("SESLoginID", System.Type.GetType("System.Int32")) dtRequests.Columns.Add("fullna

我遇到了一个问题,在我的数据库中,有一个列是0或1位,指定用户是管理员还是帐户已挂起。在我的VB代码中,我试图检索该位。示例代码:

    Dim dtRequests As DataTable
    dtRequests = New DataTable("Users")
    dtRequests.Columns.Add("SESLoginID", System.Type.GetType("System.Int32"))
    dtRequests.Columns.Add("fullname", System.Type.GetType("System.String"))
    dtRequests.Columns.Add("SESSuspended", System.Type.GetType("System.Byte"))
    dtRequests.Columns.Add("SESAdmin", System.Type.GetType("System.Byte"))
    dtRequests.Columns.Add("OfficeName", System.Type.GetType("System.String"))

    cmdoledb = New SqlCommand("SELECT SESLoginID, SESFirstName + ' ' + SESLastName As fullname , SESSuspended, SESAdmin, OfficeID from SESLogin where (SESEmail Like '%" & keyword & "%' or SESFirstName + ' ' + SESLastName like '%" & keyword & "%' or SESLastName like '%" & keyword & "%') order by SESFirstName;", objConnect)
    cmdoledb.Parameters.AddWithValue("@pid", pid)
    objConnect.Open()

    Dim rdr As SqlDataReader
    Dim myItem As ListItem = New ListItem()
    rdr = cmdoledb.ExecuteReader()

    While rdr.Read()
        Dim newrow As DataRow
        newrow = dtRequests.NewRow
        newrow.Item("SESLoginID") = rdr.GetInt32(0)
        newrow.Item("fullname") = rdr.GetString(1)
        newrow.Item("SESSuspended") = rdr.GetByte(2)  // Specified cast is not valid.
        newrow.Item("SESAdmin") = rdr.GetByte(3) // Specified cast is not valid.

        Dim officeid As Integer = rdr.GetInt32(4)
        Dim officename As String = ""

        cmdldb = New SqlCommand("SELECT OfficeName from Office where OfficeID = @offid", objConnected)
        cmdldb.Parameters.AddWithValue("@offid", officeid)
        objConnected.Open()

        officename = cmdldb.ExecuteScalar()
        newrow.Item("OfficeName") = officeid
        objConnected.Close()
        dtRequests.Rows.Add(newrow)
    End While

我尝试获取rdr.GetByte(3),这告诉我cast无效,但没有函数会说GetBit,如果存在,我就找不到它。因此,我希望得到快速响应。

尝试
rdr.GetBoolean(3)
获取位值。SQL Server中的位与VB中的布尔值相同,只是它使用1和0而不是true和false。

您可以指定数据项的名称而不是索引。例如:

newrow.Item("SESSuspended") = rdr("SESSuspended")
使用

虽然没有“布尔”SQL数据类型,但位映射到所需的.net布尔值

  newrow.Item("SESSuspended") = rdr.GetBoolean(2)
  newrow.Item("SESAdmin") = rdr.GetBoolean(3)
您还应该更改这些行

  dtRequests.Columns.Add("SESSuspended", System.Type.GetType("System.Byte"))
  dtRequests.Columns.Add("SESAdmin", System.Type.GetType("System.Byte"))


谢谢,我希望它能被指定在某个地方:)谢谢你的建议,但那不是我的问题:)
dtRequests.Columns.Add("SESSuspended", System.Type.GetType("System.Boolean"))
dtRequests.Columns.Add("SESAdmin", System.Type.GetType("System.Boolean"))