|
DataGrid + DataTable +БД MS SQqlServer ошибка при добавлении/изменении записи
|
|||
---|---|---|---|
#18+
Доброго всем времени суток. Работаю с VS2015 несколько дней - тапками и табуретками прошу не бросаться. Словил ошибку, которую не могу самостоятельно определить. Определение таблицы : Три поля. Поле IDC в БД является первичным ключом Код: c# 1. 2. 3. 4. 5. 6. 7.
Code Behind: Код: 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. 44. 45. 46. 47.
XAML: <Window x:Class="TST.MainWindow" xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=" http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d=" http://schemas.microsoft.com/expression/blend/2008" xmlns:dg=" http://schemas.microsoft.com/wpf/2008/toolkit" xmlns:mc=" http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:TST" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <ObjectDataProvider x:Key="CustomerDataProvider" ObjectType="{x:Type local:CustomerDataProvider}" /> <ObjectDataProvider x:Key="Customers1" ObjectInstance="{StaticResource CustomerDataProvider}" MethodName="GetCustomers"/> </Window.Resources> <Grid DataContext="{Binding Source={StaticResource Customers1}}" > <DataGrid x:Name="dataGrid" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="18,11,0,0" VerticalAlignment="Top" Height="296" Width="487" AutoGenerateColumns="True"/> </Grid> </Window> Собственно проблема: при удалении строки в DataGrid код отрабатывает без ошибок. При попытке добавления записи или редактирования существующей возникает исключение. Скрин сообщения системы об ошибке во вложении. Формат вывода сообщения об ошибке: MessageBox.Show("Ошибка:" + ex.GetBaseException()+' '+ ex.HResult +' '+ ex.Message +' '+ex.Source ); Ткните, пожалуйста, в какую сторону копать? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 13:29 |
|
DataGrid + DataTable +БД MS SQqlServer ошибка при добавлении/изменении записи
|
|||
---|---|---|---|
#18+
Локализовал источник ошибки. Для заполнения DataTable используется метод Fill адаптера TableAdapter. Про Fill пишутЬ следующее: Метод Fill объекта DataAdapter служит для заполнения набора данных DataSet результатами выполнения метода SelectCommand объекта DataAdapter. Метод Fill принимает в качестве аргумента подлежащий заполнению набор данных DataSet, а также объект DataTable или имя объекта DataTable, который должен быть заполнен строками, возвращенными методом SelectCommand. Метод Fill неявно использует объект DataReader для возврата имен и типов столбцов, используемых для создания таблиц в DataSet, и данных для заполнения строк таблиц в DataSet. https://msdn.microsoft.com/ru-ru/library/bh8kx08z(v=vs.110).aspx Про DataReader пишутЬ: По окончании использования объекта DataReader всегда следует вызывать метод Close. Если метод Command содержит выходные параметры или возвращаемые значения, они будут недоступны до закрытия объекта DataReader. Имейте в виду, что пока объект DataReader открыт, соединение Connection используется исключительно этим объектом DataReader . Невозможно выполнять какие-либо команды для Connection, включая создание другого объекта DataReader, пока исходный объект DataReader не будет закрыт. https://msdn.microsoft.com/ru-ru/library/haa3afyz(v=vs.110).aspx Возникает вопрос. Неужели в Microsoft не включили инструкцию Close() в тело метода Fill. В проекте Connection к БД висит открытым с самого начала. Думаю, если добавить после вызова метода Fill в коде инструкцию закрытия Connection, а перед следующими вызовами Fill, Insert, Update, Delete соединение снова открывать это решит проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 19:49 |
|
DataGrid + DataTable +БД MS SQqlServer ошибка при добавлении/изменении записи
|
|||
---|---|---|---|
#18+
Нашёл таки саму ошибку. Ошибка была не в коде приложения, а в ХП БД, которые обеспечивают Update и Insert. Конструктор VS, который помогает создать DataSet и TableAdapter, поче му то включил в тело обоих ХП помимо собственно инструкций Update и Insert ещё и Select. Достаточно было закомментить в теле ХП эти Select'ы и код стал отрабатывать в проектном режиме. Причём в ХП, отвечающую за Delete, конструктором инструкция Select не добавлялась. Привожу обе ХП с уже закомментированными Select'ами Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2017, 13:39 |
|
|
start [/forum/topic.php?fid=21&msg=39566686&tid=1440460]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
180ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 295ms |
0 / 0 |