2009-02-13 3 views
0

J'ai une zone de texte HTML qui contient du code SQL dont j'ai besoin d'être exécuté. Je suis capable de récupérer le code réel de la zone de texte, mais je ne suis pas sûr de savoir comment exécuter le code. Des manières simples et élégantes utilisant C# 3.5?Comment exécuter du code SQL à l'aide de C# 3.5?

+0

Cher Dieu, non, ne laissez pas les utilisateurs entrer sql directement dans une zone de texte! –

+0

Pour clarifier: ce n'est pas seulement le problème de sécurité, bien que ce soit une grosse affaire. Il est tout simplement trop facile pour les utilisateurs, même bien intentionnés, de mettre en place une requête qui fonctionne mal, d'arroser votre serveur et de créer un déni de service sur votre base de données. –

+0

Je ne veux pas battre un cheval mort, mais il est vraiment important que vous compreniez que c'est une idée terrible. –

Répondre

15

NE PAS CODE D'UN EXECUTE TEXTBOX

à moins que vous faites confiance vraiment ce qui est entré.

Si vous le faites, utilisez ceci:

SqlConnection con = new SqlConnection("Your connection string"); 
con.Open(); 
SqlCommand cmd = new SqlCommand(TexdtBox1.Text, con); 
cmd.ExecuteNonQuery(); 
con.Close() 

Notez que cela ne retournera rien, jsut exécuter la requête. Si vous voulez retourner des données, vous avez besoin d'un SqlDataAdaptor ou d'un SqlDataReader.

+0

+1 pour la première déclaration – tvanfosson

+0

sur 'trusing' l'entrée: ce n'est pas seulement la sécurité. c'est la performance. Il est très facile, même pour un utilisateur bien intentionné, de créer accidentellement ce qui équivaut à une attaque de déni de service sur votre base de données avec ad hoc sql. –

+0

c'est quelque chose que je connais très bien .... :) – cjk

0

Cela dépend du type de base de données que vous souhaitez exécuter. Si je peux supposer que vous voulez parler à une base de données SQL Server, regardez les classes suivantes:

+0

SqlClient est un espace de noms autant que je me souviens .... – cjk

+0

Oui, j'ai posté la réponse et l'a édité, à la fois pour réparer cela et ajouter les liens. –

0

Créer une SqlCommand avec le CommandText de votre zone de texte.

12

alt text

+0

obligatoire, bien sûr –

+0

+1 seulement une question de temps ... Je me souviens quand il est sorti, a ri assez fort :-) – WestDiscGolf

0

est ici un peu (non testé non testé car tapé à droite dans la zone de texte SO) exemple de code:

using System.Data; 

namespace MyGreatNamespace 
{ 
    class MyGreatClass 
    { 
     static public DataTable executeTable(string query) 
     { 
      return executeTable(query, null, null); 
     } 

     static public DataTable executeTable(string query, string[] params, object[] values) 
     { 
        DataTable myTable = new DataTable(); 
      using (SqlConnection connection = new SqlConnection(myConnectionString)) 
      using(SqlCommand command = new SqlCommand(connection)) 
      { 
       command.CommandType = CommandType.Text; 
       command.CommandText = myQuery; 

       if (parameters.Count == values.Count && parameters.Count > 0) 
       { 
        for(int i = 0; i < parameters.Count; i ++) 
        { 
         command.addParameterWithValue(parameters[i], values[i]); 
        } 
       } 

       using(SqlDataAdapter adapter = new SqlDataAdapter(command)) 
       { 
        adapter.Fill(out myTable); 
       } 
      } 
      return myTable; 
     } 
    } 
} 
0

Je ne le recommanderais pas, mais si vous le faites, au moins confirmer que la SQL saisi commence par SELECT et ne contient aucun point-virgule (;) ou aucun caractère de commentaire (- et/*).

Questions connexes