2013-06-28 2 views
1

Je crée une petite base de données en utilisant sql server comme back et vb comme frontend, je l'ai presque fait fonctionner mais j'ai trébuché à travers cette erreur:L'identificateur en plusieurs parties "System.Data.DataRowView" n'a pas pu être lié. "

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.

Voici mon code:

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

Qu'est-ce que colNames et colValues? – Chris

+0

Si vous utilisez Visual Studio, définissez un point d'arrêt sur la ligne où vous définissez votre requête. Déboguez ensuite l'étape suivante (f8). Qu'y a-t-il dans la variable "requête"? Il semble que votre combobox (colNames) n'a pas la propriété value définie ou qu'elle est définie sur un datarow. – tgolisch

+0

Dans votre méthode de chargement, vous pouvez mettre votre Me.BooksTableAdapter.Fill à l'intérieur d'un! IsPostBack ... –

Répondre

1

Le problème est ici:

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

Je suppose que colNames est un contrôle qui est lié à un DataTable ou un Dataview, et ainsi selectedValue est un DataRowView.

Ceci est exactement le même problème dans ce message listbox selected item give me " System.Data.DataRowView" , C# winforms. Vous ne pouvez pas définir selectedValue.ToString car il retournera toujours "System.Data.DataRowView". Vous devez convertir l'élément sélectionné dans DataRowView et vous pouvez en obtenir une valeur.

+0

salut colnames est une recherche par zone de liste déroulante et colvalues ​​est une zone de texte pour mes mots-clés – user2520014

+0

@ user2520014 Donc, je confirme que le Le problème est que vous ne pouvez pas définir colnames.selectedValue.toString (ok j'ai fait une erreur dans ma réponse et j'ai écrit ColValues ​​au lieu de ColNames). Voir le lien ci-dessus pour le convertir et obtenir la valeur. – Chris

+0

Chris a raison. Vous appelez ToString() sur l'objet auquel votre liste déroulante est liée, et cela vous donne la représentation sous forme de chaîne du type de l'objet. – Cortright

Questions connexes