powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Исключение при считывании данных SqlDataReader
5 сообщений из 5, страница 1 из 1
Исключение при считывании данных SqlDataReader
    #37615398
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Помогите, пожалуйста, решить проблему.
Есть хранимая процедура, которая считывает данные из базы такого вида:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE PROCEDURE GetAllCars
AS   
SELECT
 Brands=b.brandOfCar,
 Models=m.nameModel,
 c.color,
 c.volumeOfEngine,
 c.Description,
 p.price
FROM Cars c
JOIN Models m on c.ModelId=m.IdModel
JOIN Brands b on c.brandId=b.IdBrand
CROSS APPLY(SELECT TOP(1) * FROM Prices p WHERE p.CarId=c.IdCar ORDER BY p.datePrice DESC) p
ORDER BY Models, Brands;



Выполнение процедуры происходит в этом методе:
Код: c#
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.
public List<CarDetails> GetAllCars()
        {
            SqlConnection connection = Connection.Create();
            SqlCommand cmd = new SqlCommand("GetAllCars", connection);
            cmd.CommandType = CommandType.StoredProcedure;
            ListCars = new List<CarDetails>();

            try
            {
                connection.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    CarDetails carDetails = new CarDetails((int)reader["IdCar"], (string)reader["brandOfCar"], (string)reader["model"], (string)reader["color"], (int)reader["volumeOfEngine"], (string)reader["description"], (int)reader["price"], (DateTime)reader["datePrice"]);
                    ListCars.Add(carDetails);
                }

                reader.Close();
                return ListCars;
            }
            catch (SqlException err)
            {
                throw new ApplicationException("Data error.");
            }
            finally
            {
                connection.Close();
            }
        }



Фрагмент CarDetails :
Код: c#
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.
public class CarDetails
    {
        private int carID;
        private string brandOfCar;
        private string model;
        private string color;
        private int volumeOfEngine;
        private string description;
        private int price;
        private DateTime datePrice;
        private int idBrand;

        public CarDetails()
        {

        }
public CarDetails(string brandOfCar, string model, string color, int volumeOfEngine, string description, int price, DateTime dateTime)
        {            
            this.brandOfCar = brandOfCar;
            this.model = model;
            this.color = color;
            this.volumeOfEngine = volumeOfEngine;
            this.description = description;
            this.price = price;
            this.datePrice = dateTime; 
        }
}



Ошибка такого вида(возникает при открытии страницы) :
Код: c#
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.
Ошибка сервера в приложении '/'.
IdCar
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

Сведения об исключении: System.IndexOutOfRangeException: IdCar

Ошибка источника:

Строка 44:                 while (reader.Read())
Строка 45:                 {
Строка 46:                     CarDetails carDetails = new CarDetails((int)reader["IdCar"], (string)reader["brandOfCar"], (string)reader["model"], (string)reader["color"], (int)reader["volumeOfEngine"], (string)reader["description"], (int)reader["price"]);
Строка 47:                     ListCars.Add(carDetails);
Строка 48:                 }


Исходный файл: G:AutoCatalog\CarDB.cs    Строка: 46

Трассировка стека:

[IndexOutOfRangeException: IdCar]
   System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +148
   System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) +112
   System.Data.SqlClient.SqlDataReader.get_Item(String name) +15
   AutoCatalog.CarDB.GetAllCars() in G:AutoCatalog\CarDB.cs:46

[TargetInvocationException: Адресат вызова создал исключение.]
   System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner) +0
   System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner) +69
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +244
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +22
   System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object& instance) +640
   System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1947
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +17
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +144
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +72
   System.Web.UI.WebControls.GridView.DataBind() +5
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +66
   System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +73
   System.Web.UI.Control.EnsureChildControls() +122
   System.Web.UI.Control.PreRenderRecursiveInternal() +49
   System.Web.UI.Control.PreRenderRecursiveInternal() +226
   System.Web.UI.Control.PreRenderRecursiveInternal() +226
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +7634



В ManagementStudio процедура работает. В чём здесь проблема, помогите разобраться.
...
Рейтинг: 0 / 0
Исключение при считывании данных SqlDataReader
    #37615401
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
процедура не возвращает IdCar
...
Рейтинг: 0 / 0
Исключение при считывании данных SqlDataReader
    #37615402
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по Русски же написано:

Сведения об исключении: System.IndexOutOfRangeException: IdCar

System.IndexOutOfRangeException - Исключение, которое выбрасывается при попытке обращения к элементу массива с индексом, который находится вне границ массива. Этот класс не наследуется.

RTFM
...
Рейтинг: 0 / 0
Исключение при считывании данных SqlDataReader
    #37615418
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исправил хранимую процедуру таким образом :
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE PROCEDURE GetAllCars
AS   
SELECT
 c.IdCar,
 Brands=b.brandOfCar,
 Models=m.nameModel,
 c.color,
 c.volumeOfEngine,
 c.Description,
 p.price,
 p.datePrice
FROM Cars c
JOIN Models m on c.ModelId=m.IdModel
JOIN Brands b on c.brandId=b.IdBrand
CROSS APPLY(SELECT TOP(1) * FROM Prices p WHERE p.CarId=c.IdCar ORDER BY p.datePrice DESC) p
ORDER BY Models, Brands;


На этот раз ошибка уже в другом поле:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
brandOfCar
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

Сведения об исключении: System.IndexOutOfRangeException: brandOfCar

Ошибка источника:

Строка 44:                 while (reader.Read())
Строка 45:                 {
Строка 46:                     CarDetails carDetails = new CarDetails((int)reader["IdCar"], (string)reader["brandOfCar"], (string)reader["model"], (string)reader["color"], (int)reader["volumeOfEngine"], (string)reader["description"], (int)reader["price"], (DateTime)reader["datePrice"]);
Строка 47:                     ListCars.Add(carDetails);
Строка 48:                 }


Что здесь не так? Значения возвращаются.
...
Рейтинг: 0 / 0
Исключение при считывании данных SqlDataReader
    #37615974
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо (string)reader["brandOfCar"] напиши (string)reader["Brands"]
больше тебе ничего не буду писать, т.к. на своих ошибках не учишься, имхо
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Исключение при считывании данных SqlDataReader
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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