2010-06-03 9 views
0

J'ai le problème le plus bizarre (au moins il est bizarre pour moi) avec SQL Server Express 2008.SQL Server 2008 Express une ligne écrire

Le problème est le suivant:

Sur la machine de développement I utiliser SQL Server 2008 Enterprise .... J'obtiens des données d'un service WCF et j'écris ces données dans la base de données (aussi simple que cela puisse être) .... Je dois préciser cependant que l'écriture, c'est fait dans un autre fil. Mais, de toute façon pas de problèmes lors du développement ... toutes les données sont là. Ensuite, j'ai tout configuré (chaînes de connexion. \ SQLEXPRESS, autres paramètres) dans Release et copiez-le sur un ordinateur de test sur lequel SQL Server Express est installé (parce que mon application est une application cliente et devrait fonctionner avec Express) ... Je cours le programme .... le programme récupère les données du service ... et quand je regarde la base de données ... je suis dans une grande surprise ... il y a seulement une ligne écrite (le première rangée reçue du service WCF).

J'apprécierais vraiment toute aide ... Je suis dans une impasse ici.

+4

Personne ne pourra vous aider avec les informations que vous avez données. Vous devez fournir du code et expliquer ce que vous faites plus en détail. –

+0

code? Je viens de dire écrire des données simples à la base de données .... pas besoin de code ... en outre, il n'a rien à voir avec le code, mais plutôt avec les paramètres sur les machines. – TheBoyan

+1

pourriez-vous configurer SQL Server Express sur votre machine dev et essayer de stocker des données dans ses tables?Je ne vois pas comment SQL Server Enterprise et Express pourraient être différents de ce comportement. Si cela fonctionne sur votre machine DEV avec SQL Server Express, vous savez que l'édition de la base de données n'est pas le problème dans votre cas .... –

Répondre

1

Revérifiez tout (en particulier les chaînes de connexion). Demandez à votre application de générer un fichier journal qui pourrait vous aider à déboguer votre problème.

Vérifiez également la base de données principale pour vous assurer que les entrées ne sont pas écrites par inadvertance dans la base de données de développement.

+0

Je devrais probablement vérifier les chaînes de connexion, c'est un bon point. BTW, je me connecte tout (il ne montre aucune exception), signale simplement que c'est fait sans rien faire. Cela peut-il être un problème entre différentes versions de SQL Server? – TheBoyan

+0

En fait, je n'ai qu'une expérience minimale avec le serveur SQL. Je viens de répondre à une question de programmation générale. Pourriez-vous interroger la base de données juste après l'insertion pour confirmer que les entrées sont écrites du tout? Ne pas simplement enregistrer les exceptions. Pour le débogage, consignez également les valeurs de toutes les variables ou expressions pertinentes. – Steven

+0

Vous ne pourriez pas avoir l'expérience mais vous me donnez des idées. A propos du journal ... Je fais tout ça ... enregistrer toutes les étapes même, avec des variables et tout, j'ai aussi vérifié que les données sont là ... elles sont là (sur la machine de développement), mais une seule une ligne par table sur la machine de test (celle utilisant SQL Express) – TheBoyan

1

Avez-vous par un jeu de hasard (je sais que cela est peu probable)

set ROWCOUNT 1 
+0

non, je crains que non, je devine que cela a quelque chose à voir avec les chaînes de connexion ou les différentes versions de SQL Server. – TheBoyan

2

Êtes-vous en mesure de profil ce qui est réellement appelé sur le serveur SQL?

Ouvrez le profileur de serveur sql, pointez l'instance sql express et vérifiez que vous avez extrait l'instruction RPC: Completed et Sql terminée. Vous pouvez décocher le reste de la valeur par défaut, cela pourrait être en mesure de vous dire comment il est possible de l'appeler différemment sur le serveur.

Autres remarques: Le type de commande est-il correct?

Est-ce que le haut glisse là-dedans comment?

+0

+1 SQL Profiler est définitivement la solution. –

0

OK, quelqu'un trouve cela intéressant ...

Après une analyse approfondie ce qui est arrivé:

je me suis déplacé le code qui a été écrit les données à la DB qui était en cours d'exécution dans un thread différent de même fil que l'interface graphique .... et aucun problème cela fonctionne bien ... il écrit toutes les données dans la base de données. J'ai regardé plus loin et je suis tombé sur un article sur le web disant que SQL Express n'avait qu'un seul planificateur (et bien sûr un processeur etc ...) ... et qu'il ne supportait donc pas plusieurs threads écrivant dans la base de données à la fois (quelqu'un d'autre en sait plus à ce sujet?) ... donc la solution pour cela est probablement de créer une file d'attente et de lui envoyer des choses à l'arrivée et d'écrire les données une à une dans la base de données.

+0

Cela me semble très faux à première vue. SQL Express prend certainement en charge les utilisateurs simultanés –

+0

Cela semble très étrange je dois admettre ... mais je l'ai essayé (en utilisant plusieurs threads pour écrire sur la base de données) et cela n'a pas fonctionné – TheBoyan

+0

Comment fonctionne votre approche multi-threads? Fait-il quelque chose de différent ou de plus exotique que ce qui se passerait si plusieurs utilisateurs différents accédaient à la base de données simultanément? Aussi, je suis d'accord avec Zielyn que vous devriez utiliser SQL Profiler (ne vient pas avec express mais vous devriez être en mesure de profil de votre édition d'entreprise) –

Questions connexes