IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

Pb d'utilisation de Sql Server CE, utilisation de ProcStock et . . scope_identity() !


Sujet :

Accès aux données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Points : 109
    Points
    109
    Par défaut Pb d'utilisation de Sql Server CE, utilisation de ProcStock et . . scope_identity() !
    Bonjour,

    J'essaie de m'initier aux joies de la gestion de données sous DB en .Net (c#).
    Pour cela je me fait un petit soft pour gérer ma collection de musique. L'idée est de pouvoir utiliser le soft en mode déconnecté donc ... avec SQL server CE (3.5).

    La où ça se complique, c'est que par exemple pour la table "artists", la colonne ID est un colonne identité.
    => Premier problème, il semble que sql CE ne permette pas de se servir de scope_identity():, quand je veut faire un insert, il me crache un joli
    Server-generated keys and server-generated values are not supported by SQL Server Compact
    Du coup, je cherche un peu sur le net, et ici je trouve qu'on peut le remplacer par "@@IDENTITY".

    Je me met donc en tête de créer une ProcStock qui fasse les insert tout comme il faut... Comme je fais la gestion de mon fichier SDF (la base sql CE) dans Visual Studio, je cherche comment ajouter une ProcStock...
    => Deuxieme problème: impossible d'ajouter une ProcStock dans mon SDF sous Visual... .... et SQL server Management Studio ne permet pas d'edition de fichiers SDF..

    Je précise que pour l'instant, je cherche à utiliser un Entity Data Model pour faire la couche DAL, du coup, j'ai pas la main sur tout ce qu'il se passe partout...

    Any Help would be GREATLY apreciated !

    J'avoue que je ne sais même plus dans quelle direction me tourner pour chercher
    ElTchoupi

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2004
    Messages : 57
    Points : 71
    Points
    71
    Par défaut
    Salut

    je ne pense pas qu'il y ai de procédure stockée sous sql server CE

    en fait tu dois faire ton insert dans une première requête.

    puis faire une seconde requête : "SELECT @@IDENTITY"

    celle ci te retournera ton nouvel id


    SQL server CE est très léger et donc avec peu de fonctionnalités

    si tu veux aller plus loin en SQL utilise : SQL SERVER Express Edition

    amuses toi bien !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Points : 109
    Points
    109
    Par défaut
    Merci pour ta réponse titom59 !

    J'ai effectivement lu que les premières versions n'autorisaient pas les Proc Stock, mais j'ai aussi lu qu'elles étaient prévues pour plus tard...mais aucune trace..
    Je commence à penser que tu as raison

    Bon, du coup, j'ai un petit problème avec Entity: il me semble qu'il utilise le scope_identity() pour faire ses insert... je vais donc devoir remplacer cette mécanique pour pouvoir mettre mes propres fonctions SQL.
    Est-ce qu'on peut faire ça sans utiliser de Proc Stock ?
    Est-ce que quelqu'un l'a déjà fait ?

    Est-ce que je ferais mieux de revenir à un simple DataSet ... ?
    ElTchoupi

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 562
    Points : 859
    Points
    859
    Par défaut
    Bonjour.

    Tout d'abord SQL Server CE ne permet pas de d'utiliser des procédures stockées, ni de fonctions. Ensuite pour utiliser Entity Framework, tu dois avoir le SP1 du framework .Net 3.5 mais saches que le designer Entity Framework de Visual Studio 2008 ne gére pas encore le provider SQL Server CE, tu devras 'ruser' un peu pour obtenir le fichier edmx (il faut en fait passer par l'utilitaire en ligne de commande SQLMetal.exe)

    Je ne comprends pas ton probleme, si tu as une colonne avec un identity tu n'as pas à te soucier de ton identifiant puisque c'est SQL Server qui le gere, dans le cas d'un insert, tu remplace ta colonne 'id' par la valeur nulle.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Points : 109
    Points
    109
    Par défaut
    Bonjour !

    J'avais effectivement cru ça en lisant un (assez bon) tutorial où l'auteur utilise SQLmetal pour générer les fichiers EDM.
    Mais en installant .Net 3.5 SP1 puis le SP1 de Visual Studio 2008, je n'ai pas eu de problème de compatibilité: j'ai pu générer mon model direct depuis le fichier SDF
    Avec une base contenant des ID sans rapport avec l'identité, je peux ajouter des enregistrement, mais je dois gérer moi-même les ID.
    J'ai recommencé la même opération avec un fichier contenant des ID en identity; j'ai préféré regénérer complètement mon Data Model mais du coup, quand je tente de faire des INSERT, j'obtiens l'erreur de mon premier post..

    Tu as l'air de savoir de quoi tu parles, tu as déjà fais cette opération ?

    En tout cas, MERCI !!
    ElTchoupi

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 562
    Points : 859
    Points
    859
    Par défaut
    Oups! Désolé j'ai répondu un peu vite, en fait j'ai cru que tu utilisait Linq to SQL. Donc, il n'y a aucun probleme pour générer le model via le designer de vs2008 SP1 avec une base SQL Server CE 3.5.
    Ensuite, l'erreur que tu obtient est une limitation de l'utilisation de Entity Framework avec SQL Server CE 3.5, donc pour contourner le probleme tu devras gérer toi meme les identifiants.

    http://technet.microsoft.com/en-us/l.../cc835494.aspx

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Points : 109
    Points
    109
    Par défaut
    OK, en gros, je me fait un 'max' de chacun des ID de mes tables au lancement de mon appli puis je fais des ajouts avec ces indices, c'est ça ?

    Vu que je suis avec un DB embarquée, je risque pas d'avoir de problème de concurrence.... si je code proprement !

    Merci pour cette réponse... un peu décevante mais bon ....
    ElTchoupi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL SERVER 2005] Utilisation de Exec dans une fonction ?
    Par Dadou74 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/09/2006, 22h09
  2. Trop de mémoire utilisée par SQL Server
    Par sylvie75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/08/2006, 12h46
  3. [SQL-Server] Utilisation de SQL Server avec PHP
    Par kagura dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/01/2006, 15h39
  4. Table ASCII utilisée par SQL Server
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/06/2005, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo