Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Иногда появляется нестабильность (C#, SQL) / 1 сообщений из 1, страница 1 из 1
28.08.2009, 16:56
    #36168485
Keshkins
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иногда появляется нестабильность (C#, SQL)
Весь исполняемый код сидит на достаточно хорошей нагрузке через Веб-Сервисы. Соответственно все исполняется в параллельных потоках.
Есть некоторая ORM-модель, с кешируемыми объектами.
Объекты загружаются по единой схеме,
для загрузки используется нижеприведенный класс, сам он используется в единственном экземпляре на протяжении жизни всего приложения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
public class SqlLoader
{
    public SqlLoader()
	{
		m_GetRowCommand = new SqlCommand("dbo.LoadUser");
		m_GetRowCommand.CommandType = CommandType.StoredProcedure;
		m_GetRowCommand.Parameters.Add("Id", SqlDbType.Int);
	}

	protected SqlConnection Connection
	{
		get
		{
            return new SqlConnection(ConnectionString);
		}
	}

	protected SqlCommand m_GetRowCommand;

	public SqlCommand RowCommand
	{
		get { return m_GetRowCommand; }
	}

    public override void LoadObject(DataObject obj, int ID)
    {
        SqlCommand scmd = RowCommand;
        lock (scmd)
        {
            using (scmd.Connection = Connection)
            {
                scmd.Parameters[0].Value = ID;
                if ((scmd.Connection.State & System.Data.ConnectionState.Open) == 0)
                    scmd.Connection.Open();
                using (SqlDataReader rd = scmd.ExecuteReader())
                {
                    if (!rd.Read())
                        throw new Exception();
                    try
                    {
                        obj.Id = (int)rd.GetValue(0);
                        obj.Login = (string)rd.GetValue(1);
                        obj.Email = (string)rd.GetValue(2);
                        obj.RegDate = (DateTime)rd.GetValue(3);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        // Вот тут иногда вылазит ошибка
                    }
                }
            }
        }
    }
}

в указанном месте, раз в n-ное колебание астрала начинает сыпать ошибка IndexOutOfRangeException
соответственно подробные лог показывает, что вылазят результаты с одним полем, причем иногда даже имя его не Id а ещё какое-нибудь, встречающееся в черти-каком запросе, явно не относящемся к этому

параллельно сыпятся некоторые запросы в LinqToSql, но опять же не все..
SQL Log СУБД молчит обо всем, для него ошибок нет...
Что может быть не так?
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Иногда появляется нестабильность (C#, SQL) / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]