2009-09-29 8 views
0

Mon programme a du code qui enregistre les pièces jointes, je veux que ces pièces jointes soient transférées à la base de données, et je vais utiliser une procédure stockée pour accomplir cela.SQL Stored Proc: Comment passer une collection de fichiers à un proc stocké?

J'ai besoin de savoir quel est le type @param pour accepter un tableau de fichiers binaires?

Enfin, une fois que j'ai ce tableau, comment insérer ces données dans une table SQL? Je suppose que je regarde en utilisant un byte [] pour 1 fichier, mais comment je passe de C# ou .net une collection de tableaux d'octets au SP, et quel devrait être le type de paramètre pour accepter ce tableau de octet []

Mise à jour

Besoin d'une solution qui fonctionnera en 2005 et 2008.

Mise à jour

J'ai décidé de s merde l'idée d'avoir 1 grand SP pour tout traiter. Au lieu de cela, je vais avoir des SP plus petits, puis gérer la transaction en .net.

Pensez-vous que ce serait une meilleure solution pour gérer la transaction dans les objets de données .net?

+0

Quel dialecte de SQL utilisez-vous comme la réponse sera différente – Mark

+0

MS SQL 2005, 2008 –

Répondre

0

J'ai décidé de créer un seul SP, et de l'appeler plusieurs fois, un pour chaque fichier que j'ai besoin de télécharger, et de garder la transaction gérée en code C#.

1

Si vous n'aviez besoin que de transmettre un tableau de valeurs, je suggèrerais de les formater en XML et de les passer en tant que type de données SQL xml. Vous pouvez effectuer une sélection de XML avec SQL aussi facilement que d'une table.

Cela peut aussi techniquement fonctionner si vous transmettez des données binaires en XML, mais je ne suis pas sûr que ce soit une bonne solution. Quoi qu'il en soit, c'est une option.

+0

Je dois passer un tableau de byte [] je suppose. XML dans ce cas ne suffira sûrement pas? –

+0

Xml devrait fonctionner correctement pour votre scénario. Voir OpenXML: http://msdn.microsoft.com/en-us/library/ms186918.aspx –

1

Pour SQL Server 2008, vous pouvez utiliser la fonction de paramètre table.

Ceci vous permet de définir un paramètre d'un type de table, puis de fournir des valeurs à ce paramètre en tant que DataTable à partir de votre code C#.

Voir ces messages blog et des articles pour plus d'informations:

C'est une nouvelle fonctionnalité de SQL Server 2008, de sorte que vous n'aurez pas cela dans SQL Server 2000 ou 2005.

MISE À JOUR: si vous devez également prendre en charge SQL Server 2005, consultez l'excellent document d'Erland Sommarskog ticle Arrays and Lists in SQL Server 2005. Il propose quelques idées sur la façon d'y parvenir en 2005.

Marc

+0

Merci, mais j'ai besoin d'une solution qui fonctionnera aussi en 2005. J'ai cependant décidé de laisser tomber 2000 de l'équation. –

1

Voir Arrays and Lists in SQL 2005. Cet article regroupe à peu près toutes les techniques disponibles et discute des avantages et des problèmes de chaque approche.

Questions connexes