2009-03-10 5 views
1

titre parle de lui-même,LINQ to SQL Insérez ne fonctionne pas sur le serveur déployé (IIS)

db.ExecuteCommand("INSERT INTO tCSVFile(fileName, fileContent, mimetype, timeCreated) VALUES({0}, {1}, {2}, {3})", filename, EncodeTo64(CreateCSVFile(header, rows)), "text/csv", DateTime.Now); 

cela fonctionne correctement à partir du serveur virtuel mais iis encartage cause ne se passe rien.

a également essayé ce ..

tCSVFile c = new tCSVFile 
      { 
       fileContent = EncodeTo64(CreateCSVFile(header, rows)), 
       fileName = filename, 
       mimetype = "text/csv", 
       timeCreated = DateTime.Now 
      }; 


db.tCSVFiles.InsertOnSubmit(c); 
db.SubmitChanges(); 

fonctionne à nouveau sur le serveur virtuel, mais pas de chance sur iis. Toute aide serait grandement appréciée car j'ai regardé sur le web et n'ai rien trouvé d'utile. Mes sélections fonctionnent bien et peuvent sélectionner sans problème.

chaîne de connexion est

<add name="db_ac_motors_testConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\db_ac_motors_test.mdf;Integrated Security=True;User Instance=True" 
     providerName="System.Data.SqlClient" /> 

L'insert est un appel d'un MVC Vue partielle et se fait par ajax.beginform()

Répondre

0

Après avoir passé finalement deux heures à la recherche d'une sorte d'exception que j'ai sauvé la trace de la pile dans un journal des événements et a trouvé cette erreur

System.Data.SqlClient.SqlException: Failed to update database "(database directory)" because the database is read-only. 

Donc, avec un peu de pêche autour de l'Internet, il a dû faire avec une restriction d'autorisation d'utilisateur.

Voici un lien si quelqu'un rencontre le même problème. Je suppose que le serveur virtuel de débogage lit les autorisations de dossier différemment d'où la restriction uniquement sur le déploiement (IIS est un peu difficile quand il s'agit de permissions). Et j'ai été surpris qu'aucune exception ne soit retournée ... J'ai dû faire tellement de choses pour accéder à la trace de la pile, je ne veux même pas commencer ... De toute façon le lien est ce qu'il suffit de suivre les étapes et ça devrait vous pointer dans la bonne direction.

http://social.msdn.microsoft.com/forums/en-US/sqldataaccess/thread/2e776fb4-6df9-4a11-96f1-948b8a2f839a/#page:2

2

Êtes-vous certain que la base de données est correctement attache. De nombreux FAI l'ont configuré de sorte que vous ne pouvez pas joindre une base de données en utilisant la méthode de connexion que vous avez employée. C'est le premier endroit où vous devriez regarder. Je pense que vous auriez une erreur, mais elle pourrait être engloutie quelque part dans la pile.

Si vous devez déplacer SQL à une instance SQL (non SQL Express nécessairement) plutôt que de fixer, cela pourrait aider: http://gregorybeamer.spaces.live.com/blog/cns!B036196EAF9B34A8!630.entry?sa=214268831

2

Qu'est-ce que la fonction/méthode CreateCSVFile() faire? S'il écrit des fichiers sur le système de fichiers, il semble que vous ayez un problème de permissions. C'est-à-dire que l'utilisateur anonyme du site peut ne pas avoir d'autorisation d'écriture.

Juste une idée.

Kev

+0

Mon CreateCSVFile fait juste une énorme chaîne formatée et je le passe en-têtes et les lignes, j'encoder ensuite la chaîne à un octet [] en utilisant ma fonction EncodeTo64 et insérer dans la db. – Ayo

+0

Ok ... mais ça n'écrit rien sur le système de fichiers? Juste de la mémoire? – Kev

+0

Des exceptions ont-elles été levées? Vous n'en avalez pas dans un bloc try {} catch {// ne fais rien}? – Kev

Questions connexes