2012-05-21 4 views
0

J'ai un petit problème avec SqlServerCe. Lors de l'utilisation de sqlString ci-dessous pour exécuter un ExecuteNonQuery(); commande je reçois l'erreur ci-dessous.imbriqué SELECT numéro

string sqlString = "INSERT INTO Images (UID, Name) " + 
      "VALUES ((SELECT ID FROM Contributors WHERE ID = @UID), @Name);"; 

donne cette erreur:

There was an error parsing the query. [ Token line number = 1,Token line offset = 41,Token in error = SELECT ] 

Toutes les suggestions?

Méthode

public static void InsertImage(Contributor contObj, string ImageName) 
{ 
    string sqlString = "INSERT INTO Images (UID, Name) " + 
     "VALUES ((SELECT ID FROM [Contributors] WHERE ID = @UID), @Name);"; 
    using (SqlCeConnection sqlConnection = 
     new SqlCeConnection(WebConfigurationManager.ConnectionStrings["DefaultSQL"].ConnectionString)) 
    { 
     SqlCeCommand sqlCommand = new SqlCeCommand(sqlString, sqlConnection); 
     sqlCommand.Parameters.AddWithValue("@UID", contObj.ID); 
     sqlCommand.Parameters.AddWithValue("@Name", ImageName); 
     sqlConnection.Open(); 
     sqlCommand.ExecuteNonQuery(); 
     sqlConnection.Close(); 
    } 
} 

Répondre

1

vous voulez utiliser INSERT INTO...SELECT..FROM

string sqlString = "INSERT INTO Images (UID, Name) " + 
      "SELECT ID, @Name FROM Contributors WHERE ID = @UID;"; 

Si vous saviez déjà la valeur @ID, vous pouvez utiliser la INSERT INTO... VALUES... requête

INSERT INTO Images (UID, Name) 
VALUES (@UID, @Name) 

Edition, voici votre code avec la requête de mise à jour

public static void InsertImage(Contributor contObj, string ImageName) 
{ 
    string sqlString = "INSERT INTO Images (UID, Name) " + 
     "VALUES (@UID, @Name)"; 
    using (SqlCeConnection sqlConnection = 
     new SqlCeConnection(WebConfigurationManager.ConnectionStrings["DefaultSQL"].ConnectionString)) 
    { 
     SqlCeCommand sqlCommand = new SqlCeCommand(sqlString, sqlConnection); 
     sqlCommand.Parameters.AddWithValue("@UID", contObj.ID); 
     sqlCommand.Parameters.AddWithValue("@Name", ImageName); 
     sqlConnection.Open(); 
     sqlCommand.ExecuteNonQuery(); 
     sqlConnection.Close(); 
    } 
} 
+0

@Name n'est pas dans les contribuants. Il existe une relation de clé étrangère entre Images.UID et Contributors.ID – user1027620

+0

Je pense que vous pourriez avoir besoin du mot-clé VALUES. – JHS

+0

puisque vous utilisez un paramètre, vous devrez lui indiquer la valeur @Name lorsque vous l'exécutez. pouvez-vous éditer votre question poster votre code complet? alors je peux te montrer. – Taryn

2

Pourquoi utilisez-vous une sélection imbriquée ici? Depuis @UID déjà fait référence à la colonne ID vous choisissez, ne pouvez-vous le faire:

INSERT INTO Images (UID, Name) 
VALUES (@UID, @Name) 

Si vous avez vraiment devez utiliser une sélection, puis jeter un oeil à la réponse de bluefeet. Il fournit le paramètre que vous avez spécifié (@Name) comme l'une des valeurs insérées, donc c'est OK.

0

Vous pouvez le faire de cette façon à la place:

string sqlString = @"INSERT INTO Images(UID, Name) 
        SELECT ID, @Name 
        FROM Contributors 
        WHERE ID = @UID" 
Questions connexes