2015-12-21 1 views
0

Lorsque j'essaie de me connecter à DataBase, j'obtiens une erreur: Le mot clé ne prend pas en charge: Hôte.Impossible de se connecter à postrgres à l'aide de Visual Studio avec dotConnect

 int x = Int32.Parse(textBox1.Text); 
     try 
     { 

      System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(); 
      con.ConnectionString = 
      Properties.Settings.Default.postgresConnectionString; 
      System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); 
      cmd.Connection = con; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "getCount"; 
      System.Data.SqlClient.SqlParameter param = new System.Data.SqlClient.SqlParameter("@k", 
      SqlDbType.Int); 
      param.Direction = ParameterDirection.Output; 
      cmd.Parameters.Add(param); 
      cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Tovar", x)); 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
      string kolvo = cmd.Parameters["@k"].Value.ToString(); 
      con.Close(); 
      label1.Text = kolvo + " израсходован в количестве "; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

Chaîne de connexion:

User Id=postgres;Password=8loz9fnl;Host=localhost;Database=postgres;Persist Security Info=True 

enter image description here

+0

Pourquoi ne pas utiliser 'NpgsqlConnection' (ou peut-être' OdbcConnection'?) Au lieu de 'SqlConnection'? Le fournisseur SQL Server a 'Data Source', pas' Host' d'ailleurs. Utilisez également l'instruction 'using' pour disposer de votre connexion et commandez la commande automatiquement au lieu d'appeler manuellement la méthode' Close'. –

+0

Pourquoi ne pas utiliser [Npgsql] (http://www.npgsql.org/doc/) ?, Jetez un oeil à ce [tutoriel] (http://www.codeproject.com/Articles/30989/Using- PostgreSQL-dans-votre-C-NET-application-An-intr) –

+0

@wingedpanther Merci, Connexion fonctionne, mais j'obtiens ce résultat "La valeur du paramètre de sortie '@k" est absente dans le résultat de l'exécution de la commande. Le nom du paramètre: @k –

Répondre

2

Je suppose que vous utilisez la dotConnect de Devart pour la connectivité ado.net vous devez donc importer Devart.Data.PostgreSql et utiliser PgSqlConnection au lieu de sqlconnection et pgsqlcommand au lieu de sqlcommand

0

Comme d'autres l'ont déjà mentionné, vous devez utiliser Npgsql. Utilisez également les importations pour simplifier votre code. Exemple code de connexion: importer l'ensemble using Npgsql; puis pour obtenir une connexion et ouvrez-le

using (var conn = new NpgsqlConnection(Properties.Settings.Default.postgresConnectionString)) 
{ 
    // you other code here 
} 

De cette façon, vos ressources sont gérées automatiquement et vous n'avez pas besoin d'appeler la méthode proche, vous devez également modifier le type de commandement comme @wingedpanther mentionne. La lecture d'un bon tutoriel ou les documents mentionnés aideront beaucoup. vous devez également fixer votre chaîne de connexion comme:

Server=localhost;User Id=postgres;Password=8loz9fnl;Database=postgres;Persist Security Info=True 

Et éviter de mettre votre nom d'utilisateur et mot de passe réel.