我想使用ADO.NET(4.0 SP1)將大量的字符串數據插入到SQLExpress R2的VARCHAR(MAX)字段中。該表具有一個VARCHAR(MAX)列。目前,該字符串的大小是77012287.下面是該查詢:OutOfMemoryException SqlCommand VarChar(Max)
insert into dbo.t_test (c1) values (@c1);
我目前運行測試應用程序,構建一個新的字符串如下:
private static void ExecuteSqlQuery(int size) {
Console.WriteLine("Inserting data. Parameter size: {0}", size);
using (SqlConnection cn = new SqlConnection(SQL_CONNECTION_STRING)) {
Console.WriteLine("Opening database connection.");
cn.Open();
using (SqlCommand cm = cn.CreateCommand()) {
cm.CommandType = CommandType.Text;
cm.CommandText = SQL_INSERT;
cm.CommandTimeout = SQL_COMMAND_TIMEOUT;
cm.Parameters.Add(SQL_PARM_DATA, SqlDbType.VarChar, -1).Value = new string('a', size);
cm.ExecuteNonQuery();
}
Console.WriteLine("Closing database connection.");
}
}
我receving SQLException的時試圖用更大的值運行此方法。它從來沒有實際上擊中數據庫(我有異形SQL Express)。 SqlException是ExecuteNonQuery調用中的TimeoutException。如果我運行這個方法幾次,然後用更大的數字運行它,我會在ExecuteNonQuery調用中得到一個System.OutOfMemoryException。它看起來像內部分析器正在嘗試一個字符數組,並拋出一個錯誤。如何從.NET中將大字符串值插入到SQL Express中?謝謝。
出於好奇:多大是「大」? – Mat 2011-04-14 18:08:37
我開始看到一個字符長度爲77012287個字符的錯誤。 – Clay 2011-04-14 18:29:34
爲什麼在SQL Server中存儲77MB字符串?在任何情況下,這些大字符串都會很快導致LOH(大對象堆)中的內存碎片,從而導致出現此類異常。 – 2011-04-14 19:28:50