2010-08-30 5 views
1

J'ai un formulaire simple à deux champs qui stocke ses données dans la base de données. Pour une raison quelconque, cela ne fonctionne pas. J'ai vérifié que la chaîne de connexion fonctionne, car elle est utilisée dans un autre projet que j'ai fait.Insert SQL Server

Je n'ai pas inclus le début de la première classe ou son chargement de page.

code:

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     string Name = txtName.Text; 
     string Description = txtSpecial.Text; 
     string method = string.Format(
      "INSERT INTO RbSpecials (Name,Description,Active) VALUES ('{0}','{1}','1')", 
      Name, 
      Description); 
     RbConfiguration mySql = new RbConfiguration(); 
     try 
     { 
      mySql.Sql_Connection(method); 
     } 
     catch 
     { 

     } 
    } 
} 

public class RbConfiguration 
{ 
    string DbConnectionString = "System.Configuration.ConfigurationManager.ConnectionStrings['RBConnectionString'].ConnectionString"; 

    public void Sql_Connection(string queryString) 
    { 
     SqlConnection conn = new SqlConnection(DbConnectionString); 
     SqlCommand cmd = new SqlCommand(queryString, conn); 
     conn.Open(); 

     conn.Close(); 
    } 
} 
+0

Où apparaît l'exception, et quel est-il? –

+0

En fait, il n'a pas produit d'erreur, quand je suis allé regarder dans la table il n'y avait pas de valeurs insérées. Venez découvrir, la chaîne de connexion était entre guillemets et je n'ai pas utilisé ExecuteNonQuery() –

+0

Ne répondant pas à votre question, mais votre code est vulnérable à [injection SQL] (http://en.wikipedia.org/wiki/ SQL_injection), ce qui est très dangereux. Google vers le haut, et commencez à utiliser des requêtes paramétrées. –

Répondre

2

bien sans le savoir l'erreur, je vais tenter le coup quand même.

string DbConnectionString = "System.Configuration.ConfigurationManager.ConnectionStrings['RBConnectionString'].ConnectionString"; 

devrait être

string DbConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["RBConnectionString"].ConnectionString; 

Et comme le dit Adam, vous exécutez jamais réellement votre requête. La méthode Sql_Connection, ouvre uniquement une connexion, puis la ferme à nouveau sans rien faire.

Essayez ceci:

public void Sql_Connection(string queryString) 
{ 
    using(SqlConnection conn = new SqlConnection(DbConnectionString)) 
    { 
     SqlCommand cmd = new SqlCommand(queryString, conn); 
     conn.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
} 
+0

ahhh oui vous avez raison.J'ai aussi remarqué que le nom entre parenthèses doit être "" non ". –

+0

@Nick, ah oui dans ma hâte je n'ai pas remarqué que :) –

5

Vous ne execute votre commande SQL:

conn.Open(); 
cmd.ExecuteNonQuery(); 
conn.Close(); 

Et votre chaîne de connexion est mauvaise (fossé les guillemets doubles):

string DbConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["RBConnectionString"].ConnectionString; 
+0

merci, après avoir réparé la chaîne de connexion et d'exécuter la nonquery cela fonctionne parfaitement! –

+0

Vous devriez probablement accepter cela comme la réponse alors. :) – Mateo

0
  1. Vérifiez votre code de chaîne de connexion ne doit pas être une chaîne de sa classe qui devient la chaîne de connexion de web.config, il devrait donc être comme ça

    string DbConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings ["RBConnectionString"]. ConnectionString;

  2. Vous ne l'avez pas exécuter votre sqlCommand, donc allez l'insérer les données, faire

    conn.Open();

    cmd.ExecuteNonQuery();

    conn.Fermeture();

  3. son pas la cause mais la meilleure pratique de ne pas rendre votre code vulnérable à Injection SQL, essayez cet article

How To: Protect From SQL Injection in ASP.NET