2017-04-27 3 views
1

Voici le code pour lequel je reçoisdoit déclarer la variable scalaire '@connection' erreur

doit déclarer la variable scalaire @connection

erreur

. Je ne sais pas où je vais mal. S'il vous plaît guider

protected void LinkButton1_Click(object sender, EventArgs e) 
{ 
    string connection = Drpconn.SelectedItem.Text; 
    using (OdbcConnection con = new OdbcConnection("DSN=Sqltesting;UID=user1;[email protected];Integrated Security=no;")) 
    { 

     using (OdbcCommand cmd = new OdbcCommand("INSERT INTO TblConfigure(Connection,Server,DbName,UserID,Password,Connection_Name,Port,Service_ID) VALUES (@Connection, @Server , @DbName,@UserID,@Password,@ConnectionName,@Port,@ServiceID)", con)) 
     { 
      con.Open(); 

      cmd.Parameters.AddWithValue("@Connection", connection); 
      cmd.Parameters.AddWithValue("@Server", TxtServer.Text); 
      cmd.Parameters.AddWithValue("@DbName", DrpDbName.SelectedItem.Text); 
      cmd.Parameters.AddWithValue("@UserID", TxtUsr.Text); 
      cmd.Parameters.AddWithValue("@Password", TxtPass.Text); 
      cmd.Parameters.AddWithValue("@ConnectionName", Txtconnname.Text); 
      cmd.Parameters.AddWithValue("@Port", TxtPort.Text); 
      cmd.Parameters.AddWithValue("@ServiceID", TxtService.Text); 

      cmd.ExecuteNonQuery(); 
     } 
    } // closes the connection 
    Response.Redirect("LoginPL.aspx"); 
} 
+1

Réécrire votre texte de commande à _INSERT INTO (.....) VALEURS (?,?,?,?,?,?,?,?) _ Odbc ne supporte pas les paramètres nommés – Steve

+0

Lire les documents ici: https : //msdn.microsoft.com/en-us/library/system.data.odbc.odbcparameter.aspx, il doit utiliser un espace réservé "?" au lieu d'utiliser les paramètres de nom. –

+0

Pas la cause de votre problème, mais vous devriez [arrêter d'utiliser AddWithValue] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already) –

Répondre

2

Vous devez réécrire le texte de votre commande pour suivre les directives pour ODBC parameters. Avec ce fournisseur, vous ne pouvez pas fournir le texte de commande avec des espaces réservés NAMED incorporés pour vos paramètres.
Vous fournissez ce texte avec juste un point d'interrogation pour le paramètre.

Lorsque CommandType est défini sur Texte, le fournisseur de données .NET Framework pour ODBC ne prend pas en charge le passage des paramètres nommés à une instruction SQL ou à une procédure stockée appelée par un OdbcCommand. Dans l'une de ces cas, utilisez le point d'interrogation (?) De l'espace réservé

également lorsque vous ajoutez les paramètres à la commande collection de paramètres que vous devez leur fournir dans l'ordre exact attendu par les champs INSERT. (Mais c'est déjà correct dans votre code actuel)

string cmdText = @"INTO TblConfigure 
      (Connection,Server,DbName,UserID, 
      Password,Connection_Name,Port,Service_ID) 
      VALUES (?,?,?,?,?,?,?,?)"; 
    using (OdbcCommand cmd = new OdbcCommand(cmdText, con)) 
    { 
     con.Open(); 
     cmd.Parameters.AddWithValue("@Connection", connection); 
     ..... 

Une note finale. Méfiez-vous de AddWithValue. C'est un raccourci pratique, mais dans certaines circonstances, il vous mord. Voir Can we stop using AddWithValueAlready?