2016-09-12 28 views
1

Ich versuche, eine XML-Datei von einem bestimmten Speicherort zu extrahieren, aber ich werde diesen bestimmten Speicherort in C# und müssen es in das SQL-Skript übergeben. Verwenden von OpenRowSet mit parametrisierten Dateinamen

Dies ist ein Ausschnitt aus meinem aktuellen Code:

CREATE TABLE XMLwithOpenXML 
(
Id INT IDENTITY PRIMARY KEY, 
XMLData XML, 
LoadedDateTime DATETIME 
) 

DECLARE @filePath nvarchar(256) 

INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime) 
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK 'C:\BimlFlex\BimlFlex.DatabaseContents.xml', SINGLE_BLOB) AS x; 

Offensichtlich möchte ich die hart codierte Pfad mit @filepath ersetzen (oder?), Aber wenn ich das tue, so heißt es, dass es sich um eine Zeichenfolge erwartet oder ein text_lex.

using (var cmd = new SqlCommand(...)) 
{ 
    cmd.Parameters.Add(new SqlServerParameter(0, "actual path from unzipping"); 

bearbeiten:

Dann in C# Ich mag, etwas zu tun bin die Hoffnung, ich werde wie so dynamischen SQL für den OPENROWSET Teil verwenden:

DECLARE @OpenRowSetSql nvarchar(MAX) 

SET @OpenRowSetSql = 
'INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime) 
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK '''+ @filePath + ''', SINGLE_BLOB) AS x;' 

EXEC sp_executesql @OpenRowSetSql 

jetzt meine Frage: Wie lade ich den Parameter in C#?

+0

machen Sie eine Google-Suche auf dem folgenden, um die vielen Beispiele im Internet zu sehen 'Stackoverflow VON OPENROWSET' – MethodMan

+0

Ok, also habe ich herausgefunden, dass ich meine OpenRowSet-Abfrage in Dynamic sql machen muss, aber dann wie lade ich den Parameter in C#? Dies ist meine neue Abfrage [hier] (http://pastebin.com/zGVDGc0v) –

+0

aktualisieren Sie Ihren Code Ich werde nicht auf unbekannte Links klicken Sorry Bearbeiten Sie die Frage und zeigen Sie Ihre dynamische SQL hier – MethodMan

Antwort

1

Ok, also habe ich meine Antwort gefunden.

Wenn Sie ein SqlConnection dann verwenden, müssen Sie als Parameter in den Variablennamen übergeben, damit es sein würde:

cmd.Parameters.Add(new SqlServerParameter("@filePath", "actual path from unzipping"); 

jedoch in einem OleDbConnection, dann müssen Sie etwas wie

DECLARE @filePath nvarchar(256) 
SET @filePath = ? 
tun

in der sQL ... und dann

cmd.Parameters.Add(new OleDbParameter("0", "actual path from unzipping"); 

wobei 0 vari der Anzahl entspricht fähig (dargestellt durch ein "?") ist es von oben (beginnend bei 0).

Verwandte Themen