2013-07-25 5 views
6

Wie in der Frage, bei einer großen Textdatei, wie kann ich seinen Inhalt in eine nvarchar (max) Spalte in SQL Server ohne Laden der gesamten Datei Inhalt in den Speicher (entweder um eine dynamische SQL-Anweisung oder als eine SP-Parameter)?Kann ich einen großen Textwert von ASP.net in SQL Server einfügen, ohne die gesamte Datei auf dem Webserver zu speichern?

Meine beste Lösung bisher ist es, eine Zeile mit einem leeren Wert einzufügen und dann in einer Schleife Aktualisierungen zu erstellen, die jedes Mal in einer Transaktion einen Teil der Daten anhängen. Gibt es einen besseren Weg als die Datei auf den Datenbankserver zu kopieren und BCP zu verwenden? Eine Möglichkeit, die Daten zu übertragen?

+1

Blick in die [SqlBulkCopy Klasse] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient. sqlbulkcopy.aspx). –

+0

Ich habe SqlBulkCopy verwendet, aber es erfordert, dass die Daten im Speicher in einer DataTable gespeichert sind. Es sei denn, es gibt eine andere Möglichkeit, es zu benutzen? – powlette

+1

Ich denke, Ihre Frage wird unter http://stackoverflow.com/questions/2101149/how-to-i-serialize-a-large-graph-of-net-object-into-a-sql-server-blob- beantwortet. ohne-c –

Antwort

3

Ab .net4.5 SqlParameters unterstützen TextReaderhttps://msdn.microsoft.com/en-us/library/hh556234(v=vs.110).aspx

using (SqlConnection conn = new SqlConnection(connection_string)) 
using (SqlCommand cmd = conn.CreateCommand()) 
using (FileStream file = File.OpenRead(@"C:\temp\bigtextfile.txt")) 
{ 
    cmd.CommandText = "INSERT INTO RandomTable (TextBlob) VALUES (@text)"; 
    cmd.Parameters.Add("@text", System.Data.SqlDbType.NVarChar, -1).Value = file; 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
} 
Verwandte Themen