8
votes

Insertion d'une ligne et récupération d'identité de nouvelle ligne dans SQL Server CE

J'essaie d'insérer une ligne et de récupérer l'identité de la nouvelle ligne avec quelque chose comme ceci: xxx

J'essaie d'exécuter les deux déclarations avec une seule invocation d'un objet DBCOMMAND en c # ... Cela ne semble pas fonctionner ou j'ai quelque chose de mal.

J'ai lu que Compact Edition ne prend pas en charge l'exécution de plusieurs déclarations dans un lot ... mais j'ai aussi trouvé Ceci:

Si vous souhaitez exécuter plusieurs requêtes simultanément, vous devez inclure un nouveau caractère de ligne pour chaque relevé et un point-virgule à la fin de chaque relevé.

source: http: // TechNet .microsoft.com / fr-US / US / Bibliothèque / BB896140 (SQL.110) .aspx

Cela fonctionne-t-il ou non ... et si oui, que manque-t-il?

(Je me rends compte que je peux exécuter deux commandes et cela fonctionne bien, mais je me demande si je manque quelque chose).


1 commentaires

Que voulez-vous dire par "ne semble pas fonctionner" [sic]? Ce qui se produit? Avez-vous un message d'erreur?


3 Réponses :


8
votes

Cela ressemble à une erreur DOC, c'est l'inverse. Vous ne pouvez exécuter qu'une seule déclaration par appel exécutenonquery.


1 commentaires

Surpris si une erreur DOC peut être répétée au moins 3 fois pour SQLCE 3.5 SP1 , 3.5 SP2 , et 4.0 ? J'ai vraiment confus.



3
votes

Vous devez définir un paramètre de sortie pour obtenir une valeur d'identité xxx


3 commentaires

Êtes-vous sûr de cela? J'utilise dbcommand.exectescalar () et cela renvoie la nouvelle identité de l'identification des enregistrements. Il doit simplement être une commande séparée et non une lotte.


SQL Server Compact Edtion prend uniquement en charge une déclaration unique par commande. Lien


En outre, il semble que vous devez "sélectionner @@ identité" contre la même connexion ouverte que vous avez exécutée "insertion".



0
votes

Après de nombreuses erreurs avec SQL-Server-CE CO> tels que la direction ne pouvait pas être émise, je l'ai eu pour fonctionner.

public static long GetIdentity(this IDbConnection connection)
{
    var cmd = connection.CreateCommand();
    cmd.CommandText = "SELECT @@IDENTITY";
    cmd.CommandType = CommandType.Text;
    var id = cmd.ExecuteScalar();
    return (long)(decimal)id;
}


0 commentaires