2013-07-25 10 views
6

Jak napisano w pytaniu, biorąc pod uwagę duży plik tekstowy, jak mogę umieścić jego zawartość w kolumnie nvarchar (max) w serwerze sql bez ładowania całej zawartości pliku do pamięci (albo do zbudowania dynamicznej instrukcji sql lub jako Parametr SP)?Czy mogę wstawić dużą wartość tekstową do SQL Server z ASP.net bez posiadania całego pliku w pamięci na serwerze WWW?

Moim najlepszym rozwiązaniem do tej pory jest wstawienie wiersza z pustą wartością, a następnie w pętli uruchamianie aktualizacji dołączanie porcji danych za każdym razem w transakcji. Czy istnieje lepszy sposób niż kopiowanie pliku na serwer bazy danych i korzystanie z BCP? Jakiś sposób na transmisję danych?

+1

patrzeć w [klasy SqlBulkCopy] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient. sqlbulkcopy.aspx). –

+0

Użyłem SqlBulkCopy, ale wymaga danych w pamięci w DataTable. Chyba że jest jakiś inny sposób na wykorzystanie go? – powlette

+1

Domyślam się, że na twoje pytanie odpowiada http://stackoverflow.com/questions/2101149/how-to-i-serialize-a-large-graph-of-net-object-into-a-sql-server-blob- without-c –

Odpowiedz

3

Na SqlParameters .net4.5 wspierać 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(); 
} 
Powiązane problemy