2011-07-26 25 views
1

我遇到了一個問題,在我的數據庫中,我有一列是0或1,指定用戶是管理員還是帳戶被暫停或不是。而在我的VB代碼中,我試圖找回那一點。示例代碼:在VB NET中從SQL數據庫檢索一個位列

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),這告訴我,投無效,但沒有這些功能會說GETBIT,如果這樣的存在我找不到它。因此,我希望能夠做出快速反應。

回答

1

嘗試rdr.GetBoolean(3)獲取位值。 SQL Server中的一點與VB中的布爾值相同,除了它使用1和0而不是true和false。

+0

謝謝你,我希望它會被指定的地方:) – Angie

0

您可以指定數據項的名稱而不是索引。如:

newrow.Item("SESSuspended") = rdr("SESSuspended") 
+0

謝謝你的建議,但是這不是我的問題:) – Angie

2

使用GetBoolean

雖然沒有 「布爾」 SQL數據類型,位映射到.NET布爾

2

你想

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"))