|
Исключение при считывании данных SqlDataReader
#37615398
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
Здравствуйте!
Помогите, пожалуйста, решить проблему.
Есть хранимая процедура, которая считывает данные из базы такого вида:
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;
Выполнение процедуры происходит в этом методе:
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 :
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;
}
}
Ошибка такого вида(возникает при открытии страницы) :
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 процедура работает. В чём здесь проблема, помогите разобраться.
|
|
|