2016-06-14 1 views
0

J'ai écrit un formulaire VB sur Visual Studio 2013 (.Net Framework 4.5.1) qui ouvre et édite une base de données pgSQL. Pour que l'utilisateur puisse rechercher dans la table, j'ai créé une compobox à partir de laquelle l'utilisateur peut sélectionner la colonne à rechercher et entrer ensuite la valeur qu'il recherche dans une zone de texte.VB.NET avec pgSQL: Comment changer le type de zone de texte dans les requêtes SQL?

Afin d'intégrer pgSQL avec VS 2013 J'utilise le logiciel de dotConnect Devart pour PostgreSQL 7.6 Express (la version gratuite)

Cette table particulière a trois colonnes (id, nom, équilibre). En pgSQL le type de colonne pour l'ID est entier, pour le nom est caractère variant et pour l'équilibre est numérique.

Lorsque je teste la recherche par nom, tout fonctionne correctement. Pour les deux autres domaines, je évidemment essayé de changer le type de zone de texte dans la requête SQL en utilisant CType et CInt, mais rien ne fonctionne et je reçois l'erreur:

operator does not exist: integer ~ ~ unknown

Ci-dessous est mon code.

Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click 

    'creating pgsql connection and query 
    Dim myQuery As String 
    Dim pgSqlConnection1 As PgSqlConnection = New PgSqlConnection() 
    pgSqlConnection1.ConnectionString = "UserId=postgres;Password=***;Host=localhost;Database=postgres;Persist Security Info=True;Initial Schema=public" 

    'searches according to selected column 
    If ComboBox1.Text = "customer_name" Then 
     myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE customer_name LIKE '%" & TextBox1.Text & "%'" 
     Search(myQuery, pgSqlConnection1) 
    ElseIf ComboBox1.Text = "customer_id" Then 
     myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE customer_id LIKE '%" & CType(TextBox1.Text, Integer) & "%'" 
     Search(myQuery, pgSqlConnection1) 
    ElseIf ComboBox1.Text = "balance" Then 
     myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE balance LIKE '%" & CType(TextBox1.Text, Double) & "%'" 
     Search(myQuery, pgSqlConnection1) 
    End If 

End Sub 

Public Sub Search(myQuery As String, pgSqlConnection1 As PgSqlConnection) 

    'Try statement to show error instead of crashing 
    Try 

     pgSqlConnection1.Open() 
     Dim dt As New DataTable 
     Dim MyCommand As New PgSqlCommand(myQuery, pgSqlConnection1) 
     Dim myDataAdapter As New PgSqlDataAdapter(myQuery, pgSqlConnection1) 
     myDataAdapter.Fill(dt) 
     DataGridView1.DataSource = dt 
     pgSqlConnection1.Close() 

    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

End Sub 

Quelqu'un peut-il m'aider avec cela? Excusez toute fausse caractérisation, je suis un débutant. Merci d'avance!

+0

'LIKE' ne fonctionne pas sur les nombres. Cela ne fonctionne qu'avec des valeurs de caractères. Donc 'customer_id LIKE ...' et 'balance LIKE' sont faux (et n'ont pas beaucoup de sens pour moi pour être honnête) –

Répondre

0

Utilisez un CAST dans votre requête afin de pouvoir utiliser le LIKE avec un entier.

Exemple:

myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE CAST(customer_id AS TEXT) LIKE '%" & CType(TextBox1.Text, Integer) & "%'" 

Avec un nombre entier, vous pouvez également utiliser BETWEEN qui vous permettra de rechercher entre 2 numéros:

myQuery = "SELECT customer_id, customer_name, balance FROM account_current WHERE customer_id BETWEEN '%" & CType(TextBox1.Text, Integer) & "%' AND '%" & CType(TextBox1.Text, Integer) & "%'" 

Aussi, si vous êtes débutant, un coup d'oeil à npgsql qui est le connecteur Postgres .NET: http://www.npgsql.org/