2016-09-20 1 views
0

J'ai un code qui est utilisé pour ajouter quelques lignes à SQL mais cela ne fonctionnera pas. Select et Delete fonctionnent mais pas la commande ALTER TABLE.Client C# Sql: La table ALTER ne fonctionne pas

Si je copie et collez uniquement ma sortie de console dans Microsoft Management Sql Query, cela fonctionne. (tmp1 est rempli avec un nom, tmp2 est rempli pour l'exemple CHAR (50))

Edit: Je n'obtiens une erreur, dans les journaux de mon serveur SQL je ne vois pas une commande appelée « Alter » à excuted.

string tmp1, tmp2; 
tmp1 = addfrm.getTableName(); 
tmp2 = addfrm.getType(); 

string constring = @"Data Source=" + adr + ";Initial Catalog=" + dat + ";User ID=" + user + ";Password=" + pwd; 
try 
{ 
    using (SqlConnection con = new SqlConnection(constring)) 
    { 
     string tmp = @"ALTER TABLE " + tbl + " ADD " + tmp1 + " " + tmp2; 
     Console.WriteLine("Mein Befehl lautet: " + tmp); 

     using (SqlCommand cmd = new SqlCommand(tmp, con)) 
     { 
      cmd.CommandType = CommandType.Text; 
      using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
      { 
      } 
     } 
    } 
} 

catch (SqlException) 
{ 
    MessageBox.Show("Fehler"); 
} 
+3

Quelle erreur obtenez-vous? Postez votre erreur aussi. –

+0

Cette commande vous semble indiquer que vous essayez d'ajouter des colonnes à la table pour ne pas ajouter de lignes. –

+0

Vous n'avez jamais exécuté la requête SQL vers la base de données. Utilisez 'ExecuteNonQuery' sur' SqlCommand'. –

Répondre

1

Vous n'envoyez pas de requête SQL à la base de données. Utilisez ExecuteNonQuery sur SqlCommand. Au lieu de:

using (SqlCommand cmd = new SqlCommand(tmp, con)) 
{ 
    cmd.CommandType = CommandType.Text; 
    using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
    { 

    } 
} 

utilisation

using (SqlCommand cmd = new SqlCommand(tmp, con)) 
{ 
    cmd.ExecuteNonQuery(); 
} 

adaptateur ne sera pas exécuter la requête jusqu'à ce que adapter.Fill est appelée.

+0

Pouvez-vous également expliquer pourquoi cela ne fonctionnera pas avec' SqlDataAdapter'. Y at-il des modifications peuvent être faites, de sorte qu'il fonctionne avec 'SqlDataAdapter' – GauravKP

+0

'SqlDataAdapter' est destiné à fonctionner avec les opérations CRUD. Pas besoin de l'utiliser quand le DDL est effectué. –

+0

Il dosent faire quelque chose pour moi. Je ne reçois aucune erreur ou exception. – FeuFeuAngel

0

Vous ne définissez pas correctement les valeurs. Essayez ceci cela devrait fonctionner.

string tmp1, tmp2; 
       tmp1 = addfrm.getTableName(); 
       tmp2 = addfrm.getType(); 

       string constring = @"Data Source=" + adr + ";Initial Catalog=" + dat + ";User ID=" + user + ";Password=" + pwd; 
       try 
       { 
        using (SqlConnection con = new SqlConnection(constring)) 
        { 
         string tmp = @"UPDATE TABLE " + tbl + " SET Col1 = '" + temp1 +"',Col2='" + tmp2 +"'"; 

         Console.WriteLine("Mein Befehl lautet: " + tmp); 

         using (SqlCommand cmd = new SqlCommand(tmp, con)) 
         { 
          cmd.CommandType = CommandType.Text; 
          using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
          { 
    cmd.ExecuteNonQuery(); 
          } 
         } 
        } 
       } 
       catch (SqlException) { MessageBox.Show("Fehler"); } 
+0

Cela n'a pas fonctionné:/même résultat pour moi (vous oubliez + et écrit temp, j'ai fixé cet espoir c'est ok) – FeuFeuAngel

+0

devrait être mise à jour plutôt que de modifier j'ai mis à jour la réponse s'il vous plaît vérifier maintenant. –

+0

Maintenant, il a quelques problèmes avec votre Excout NonQuerry. Le programme s'arrête avec l'erreur que les connexions sont toujours fermées. J'ai essayé de l'ouvrir avec con.Open(); et fermé il afer le sqlnonquerry mais que j'obtiens une exception SQL avec "System.Data.SqlClient.SqlException" dans System.Data.dll. – FeuFeuAngel

0

Je viens de l'éviter avec Fill. C'est un peu brouillon mais ça va. Merci à Pawel qui l'a dit.

      using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
         { 
          DataTable dt = new DataTable(); 
          sda.Fill(dt); 
         }