2011-01-16 2 views
1

У меня очень странная проблема, я использую System.Data.SqlClient. для получения данных с SQL Server, за исключением хранимой процедуры. Когда я протестировать приложение на машинах развития и спекуляции он работает нормально, но когда я развернуть приложение на Production Server, я случайно получаю сообщение об SqlDataReaderIndexOutOfRangeException с разными названиями столбцов !.SqlDataReader - случайные капли столбцов!

Ошибка появляется в двух запросах в каждом запросе 1000 (приблизительно).

SQL-сервер Кластерный

Исходный код:

public static List<CountryInfo> GetAllCountries(){ 
      List<CountryInfo> Items = new List<CountryInfo>(); 
      try{ 
       using (rdr = SqlHelper.ExecuteReader(Globals.ConnectionString, "unv_spGetAllCountries")) 
       { 
        while (rdr.Read()) 
        { 
         CountryInfo item = new CountryInfo(); 
         item.CountryId = Convert.ToInt32(rdr["CountryId"]); 
         item.CountryName = rdr["CountryName"].ToString(); 
         item.FirstLevel = rdr["FirstLevel"].ToString(); 
         item.SecondLevel = rdr["SecondLevel"].ToString(); 

         Items.Add(item); 

        } 
       } 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 

      Items.TrimExcess(); 
      return Items; 
     } 

хранимой процедуры:

select * from unv_tblCountries order by CountryName; 

Уже испытано

  • Проверьте имена столбцов хранимой процедуры.
  • Проверьте имена столбцов считывателя.
  • Проверить строку подключения.

Кто-нибудь сталкивался с этой проблемой и решает ее?

+7

Вам нужно будет предоставить более подробную информацию и желательно соответствующий источник. Без этого мало что можно сказать об этом. –

+5

Я предлагаю блок catch, который регистрирует это исключение и все передаются в параметрах. – Oded

+0

Я добавил дополнительную информацию. –

ответ

0

Я нашел его SqlDataReader varibale rdr был объявлен static в контроллерах базового класс который цветовых его общая varibale между всеми контроллерами. В потоках запросов использовался один и тот же DataReader и изменение столбцов в нем.

3

Я сделаю ставку, это не проблема с данными. Я предполагаю, что одна или несколько учетных записей пользователей используют более конкретную (и более старую) копию sproc (и т. Д.) - например, Fred.MyProc вместо dbo.MyProc, или существует условная ветвящаяся логика в sproc, которая возвращает разные столбцы в некоторых случаях - возможно, ветвь кода, которую вы забыли обновить.

Другой потенциальной проблемой является, по-видимому, различная чувствительность к регистру в DB causin различных объектов, которые будут использоваться; то есть Myproc vs MyProc - который может быть другим, если БД чувствительна к регистру.

Чтобы точно узнать, приложите трассировку SQL к журналу точно что (и кем) отправляется в случае сбоев; затем воспроизведите что-то вроде SSMS, сравнивая dev с prod.

+0

Спасибо за ваш ответ, я изменил строку подключения, чтобы подключиться к базе данных с одинаковым именем пользователя и паролем, и она отлично работает. при развертывании приложения на производственных серверах! –

+0

@Khaled, то ваш prod-сервер не настроен одинаково, или есть ветвь кода, которая достигается только с его данными в prod, вам придется попытаться воспроизвести ее и проследить это, чтобы посмотреть, что. –

+0

Спасибо за вашу корпорацию, у меня есть сомнения в сервере и сети, BTW, какую конфигурацию вы имели в виду? –

Смежные вопросы