2013-06-28 47 views
1

我正在製作一個小型數據庫,使用sql server作爲後端,vb作爲前端,我幾乎已經使其工作,但是我已經絆倒了跨越這個錯誤:無法綁定多部分標識符「System.Data.DataRowView」。

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

Additional information: The multi-part identifier "System.Data.DataRowView" could not be bound.

這裏是我的代碼:

Imports System.Data.SqlClient 
Public Class searchDialog 

    Private Sub searchDialog_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     'TODO: This line of code loads data into the 'SearchDataSet.Books' table. 
     'You can move, or remove it, as needed. 
     Me.BooksTableAdapter.Fill(Me.SearchDataSet.Books) 
    End Sub 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     Dim ds As New DataSet 
     Dim query As String = "select * from Books where " + colNames.SelectedValue.ToString + " LIKE " + "'%" + colValues.Text + "%'" 
     BooksTableAdapter.Connection.Open() 
     Dim adp As New SqlDataAdapter(query, BooksTableAdapter.Connection.ConnectionString) 
     adp.Fill(ds, "Books") 
     BooksTableAdapter.Connection.Close() 
     filteredRecords.DataSource = ds 
     filteredRecords.DataMember = "Books" 
    End Sub 
End Class 
+0

什麼是colNames和colValues? – Chris

+0

如果您使用Visual Studio,請在設置查詢的行上設置斷點。然後調試下一步(f8)。什麼是變量「查詢」?它看起來像是你的組合框(colNames)沒有設置value屬性,或者它被設置爲一個數據行。 – tgolisch

+0

在你的加載方法中,你可能想把你的Me.BooksTableAdapter.Fill放在!IsPostBack裏面...... –

回答

1

問題是在這裏:

Dim query As String = "select * from Books where " + colNames.SelectedValue.ToString + " LIKE " + "'%" + colValues.Text + "%'" 

我猜colNames是一個綁定到DataTableDataview的控件,所以selectedValue是DataRowView

在這篇文章listbox selected item give me " System.Data.DataRowView" , C# winforms這完全是相同的問題。 您不能設置selectedValue.ToString,因爲它會通常返回「System.Data.DataRowView」。 您需要將選定的項目轉換爲DataRowView,然後才能從中獲取值。

+0

嗨colnames是一個組合框搜索和colvalues是我的關鍵字文本框 – user2520014

+0

@ user2520014所以我確認問題是你不能設置colnames.selectedValue.toString(好吧,我在我的答案中犯了一個錯誤,我寫了ColValues而不是ColNames)。查看上面的鏈接,將其轉換並獲取價值。 – Chris

+0

克里斯是對的。你在你的組合框所綁定的對象上調用ToString(),並且它給出了對象類型的字符串表示形式。 – Cortright

相關問題