2014-01-10 1 views
1
private static void InsertClinicalItemMaster(XElement elecim) 
    { 
     //Insert To DataBase Logic 
     try 
     { 
      String strStatus = ""; 
      SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=saadmin"); 
      SqlCommand cmd = new SqlCommand("SP_Insert_ClinicalItemMaster", con); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add("@xmlData", SqlDbType.Xml).Value = Convert.ToString(elecim); 
      cmd.Parameters.Add("@retValue", SqlDbType.NVarChar).Value = strStatus; 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

Когда «cmd.ExecuteNonQuery();» выполняется, тогда я получаю выше «OutOfMemoryException». Я предполагаю, что проблема с преобразованием XElement в String.Исключение типа «System.OutOfMemoryException» было сброшено

+1

Каков размер данных, которые должны быть возвращены этим SPROC? – DarkWanderer

+0

Около 2 записей lakhs (из таблицы данных Sql состоит из 25 столбцов) – MSanika

ответ

1

Вы пытаетесь получить слишком большой кусок данных для обработки в одной строке (что само по себе является анти-шаблоном).

Пожалуйста, используйте более семантически правильную альтернативу - создание класса с Enumerator и выборку записей по записи. Или - лучше - просто используйте стандартное решение (LINQ-to-SQL/Entity Framework). Это позволит вам не тратить память на синтаксический анализ строк и получать фактические объекты (которые занимают гораздо меньше памяти)

Использование хранимой процедуры для упаковки 200 000 (или любого количества) объектов в строку для ее анализа в приложение ... Ну ... Просто никогда не делайте этого снова :)

+0

Спасибо за консультацию – MSanika

+0

Каков наилучший способ вставки больших данных Xml в sql-сервер? Можете ли вы помочь в этом? – MSanika

+0

@ Kittu: Лучший способ, по моему мнению, разобрать XML локально, а не на сервере, и вставить элементы, используя LINQ-to-SQL или простой SQL. Чтение XML для очень больших файлов может быть потоковым (пример: http://msdn.microsoft.com/en-us/library/bb387013.aspx) – DarkWanderer