2013-08-17 4 views
0

J'ai ce code:C# altérant table SQL

try 
{ 
    OpenDatabaseConnection(); 
    sql += @"ALTER TABLE @TableName " + 
      "ADD @ColumnName @DataType(@Size)"; 

    using (SqlCommand command = conn.CreateCommand()) 
    { 
     command.CommandText = sql; 
     command.Parameters.Add("@TableName", SqlDbType.VarChar).Value = tableName; 
     command.Parameters.Add("@ColumnName", SqlDbType.NVarChar).Value = columnName; 
     command.Parameters.Add("@DataType", SqlDbType.NVarChar).Value = dataType; 
     command.Parameters.Add("@Size", SqlDbType.NVarChar).Value = size; 

     command.ExecuteNonQuery(); 
    } 
    CloseDatabaseConnection(); 
} 
catch (Exception ex) 
{ 
    ArrowMessageBoxes.ArrowErrorMessage(ex.Message); 
} 
finally 
{ 
    CloseDatabaseConnection(); 
} 

et lorsque ce code est exécuté, je reçois l'erreur suivante: syntaxe incorrecte près de '@TableName'.

Il doit y avoir quelque chose qui me manque.

+1

Si vous avez besoin de mettre à jour le schéma d'une table, quelque chose comme un projet SSDT peut être ce que vous recherchez. Avoir besoin de modifier à la volée le schéma de votre base de données pour le bon fonctionnement d'une application est un énorme drapeau rouge. Cela signifie que votre base de données n'est pas correctement conçue. –

Répondre

4

DDL ne peut pas contenir de paramètres. Si vous insistez pour créer/modifier dynamiquement des tables et des colonnes, vous devez créer un SQL dynamique et escape very, very carefully. Pourquoi voulez-vous modifier dynamiquement les tables?

+0

Cela fonctionne très bien lorsque je crée des tables et lorsque je les insère dans ces tables. Mais le moment où je modifie la table ...... ???? –

+0

@ Bebbie7 Paramétrez-vous le nom de la table create table? –

+0

Oui, exactement comme ça, mais juste l'insérer dans et créer des tables. Je permets aux utilisateurs de créer leurs propres tables et d'autres choses. –

-1
sql += @"ALTER TABLE [" + tableName + "] " + 
     "ADD [" + columnName + "] " + dataType + " (" + size + ")"; 
+1

Comme je l'ai dit dans ma réponse ci-dessous, faites attention. Considérons quelque chose comme 'tableName =" foo] DROP [id] \ nGO \ NALTER TABLE [foo "'. Maintenant, ce ne serait pas très bon pour les affaires et c'est le moins du genre de dommages qu'ils pourraient faire –