Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
 
Andrey221
0 / 0 / 0
Регистрация: 04.02.2016
Сообщений: 22
#1

Вылетает на SaveChanges() - C#

09.02.2016, 01:59. Просмотров 1679. Ответов 20
Метки нет (Все метки)

Заполняю бд
ввожу данные
и нажимаю кнопку сохранить
и вылетает на
C#
1
entities.SaveChanges();
Не могу понять в чем дело подскажите как устранить
Вот сам код:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
 
 
namespace Procat
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Entities entities = new Entities();
 
        public MainWindow()
        {
            InitializeComponent();
            content.Loaded += Content_Loaded;
            dataform.Loaded += Dataform_Loaded;
            if (entities.Procatoff == null)
            {
                MessageBox.Show("База данных не имеет объектов.", "Warning!", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            else
            {
                // заполняются комбобоксы
                foreach (var typeOfCar in entities.Car)
                { Cars.Items.Add(typeOfCar); }
            }
        }
 
        private void Content_Loaded(object sender, RoutedEventArgs e)
        {
            datascroll.MaxHeight = content.MaxHeight - 34 - 5 - 22;
        }
 
        private void Dataform_Loaded(object sender, RoutedEventArgs e)
        {
            Save.Width = dataform.ActualWidth - 2;
        }
 
        private void Save_Click(object sender, RoutedEventArgs e)
        {
            if (FIO.Text == "" || telephone.Text == "" || birthdate.Text == "" || Cars.SelectedIndex == -1)
                MessageBox.Show("Недопустимое количество символов!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
            else
            {
                var add_procatoff = new Procatoff();
 
                add_procatoff.FIO = FIO.Text;
                add_procatoff.Telefon = telephone.Text;
                add_procatoff.age = Convert.ToDateTime(birthdate.Text).Date;
                add_procatoff.Car_Name = (Cars.SelectedItem as Car).Name;
                if (add_procatoff.FIO == "")
                    MessageBox.Show("Заполните все поля!", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                else
                {
                    entities.Procatoff.Add(add_procatoff);
                    entities.SaveChanges();
                    MessageBox.Show("Запись добавлена!", "Добавление", MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }
 
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2016, 01:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вылетает на SaveChanges() (C#):

Context.SaveChanges(); Не сохраняет данные - C#
Entity 6. Есть следующий код. { speed5Entities context = new speed5Entities(); Gamers gamer = FindUser(tiket.Name); ...

Ошибка сохранения изображения (Entity Data Model) метод SaveChanges() - C#
Здравствуйте! У меня есть таблица в базе данных (MS SQL 2008) - IdRow Primary key identity(1, 1) IdUnReliablePartiesRow NOT...

Приложение полностью вылетает - C#
Всем привет! Проблема такая, при закрытии формы, содержащей нижеприведенный код, возникает какая то ошибка и приложение полностью вылетает....

Программа вылетает с ошибкой - C#
Всех приветствую. Написал программу на основе компонента WebBrowser, суть программы просто автоматизация ряда действий на одном сайте....

DbContext.SaveChanges >> UpdateException - C# MVC
Здравствуйте. Пытаюсь записать новую запись В базу данных и спользуя DbContext. bool Regisration(User user) { ...

Хром не открывается, модем вылетает, везде просят капчу. И вылетает синий экран - Удаление вирусов
В общем, хотела найти лечение на соседнем форуме...но мой вопрос проигнорили.:( Одна надежда на Вас!:) Итак, с чего всё началось : ...

20
Andrey221
0 / 0 / 0
Регистрация: 04.02.2016
Сообщений: 22
09.02.2016, 02:00  [ТС] #2
Забыл скрин
0
Миниатюры
Вылетает на SaveChanges()  
Usaga
Эксперт .NET
2595 / 2156 / 398
Регистрация: 21.01.2016
Сообщений: 8,357
Завершенные тесты: 2
09.02.2016, 05:24 #3
вызов этого метода (как и все обращения к БД) нужно заключать в блок try/catch с выводом сообщения об ошибке пользователю.

Скриншот, что вы предоставили, ни о чем не говорит. Получите подробности об возникшем исключении. Нажмите "просмотр сведений" и скопируйте вывод.
0
ILKarina
17 / 17 / 4
Регистрация: 06.03.2013
Сообщений: 330
Завершенные тесты: 2
09.02.2016, 05:49 #4
Andrey221, А сам метод SaveChanges() где?

Добавлено через 2 минуты
Кто-нибудь мне объяснит что за
C#
1
Entities entities = new Entities();
? Уже у второго человека вижу этот класс. Первый так и не смог объяснить откуда он взялся!
0
Usaga
Эксперт .NET
2595 / 2156 / 398
Регистрация: 21.01.2016
Сообщений: 8,357
Завершенные тесты: 2
09.02.2016, 06:48 #5
ILKarina, рекомендую почитать что-нибудь об Entity Framework. Вот хороший ресурс. Там всё просто и доступно. На примерах.

Если кратно, то Entities, в данном случае - класс представляющий целевую БД. Или сгенерирован мастером или написан вручную, если используется подход Code-First.
1
ILKarina
17 / 17 / 4
Регистрация: 06.03.2013
Сообщений: 330
Завершенные тесты: 2
09.02.2016, 08:13 #6
Usaga, Не легче ли написать что-нибудь мелкое свое для своих целей, а не подключать целый фреймворк?

Добавлено через 1 минуту
Это как купить дорогущий суперигровой комп для того чтобы сапер на нем играть
0
Usaga
Эксперт .NET
2595 / 2156 / 398
Регистрация: 21.01.2016
Сообщений: 8,357
Завершенные тесты: 2
09.02.2016, 08:31 #7
ILKarina, нет, не легче. И я знаю, что говорю - я через такое уже проходил. Точнее, если у вас стоит задача выполнить запрос вида "SELECT COUNT(*) FROM SOMETABLE" и завершить приложение, тогда да - фреймворк не нужен. В остальных случаях попытка сэкономить (причём не понятно на чём) обернётся тем, что вы потратите время на написание (и отладку) того, что уже есть, отлажено и готово к использованию.

Кстати, вы видели минимальный вариант использования EF? В случае с Code-First это будет выглядеть так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Table("MyTable")]
public class MyTableClass
{
    [Key]
    public int Id{get;set;}
    public string TableColumn {get;set;}
}
 
public class SomeDatabase : DbContext
{
    public SomeDatabase() : base()
    {}
 
    public DbSet<MyTableClass> TableClasses{get;set;}
}
Не так уж и много, не правда ли? В ручную, "маленькое" писать придётся дольше и больше.

Добавлено через 4 минуты
Если EF изучать не хочется (а это единственная причина, которая может объяснить нежелание использовать этот замечательный фрэймворк), то можно воспользоваться библиотеками micro-orm (PetaPoco, Dapper). Это ещё с горем попалам можно считать чем-то средним между голым ADO.NET и "мостодонтом" в лице EF. Но даже самое мало-мальски крупное приложеньице закончит тем, что вы для него напишете свой вариант EF, причём менее функциональный и куда более глючный
1
OwenGlendower
Модератор
Эксперт .NET
7702 / 6670 / 2477
Регистрация: 17.03.2014
Сообщений: 13,042
Записей в блоге: 1
09.02.2016, 12:02 #8
Andrey221, в первую очередь стоит проверить задан ли первичный ключ и если нет, то добавить его. В противном случае нужно смотреть вложенные исключения. Там должно быть более подробное описание что именно пошло не так.
0
Andrey221
0 / 0 / 0
Регистрация: 04.02.2016
Сообщений: 22
09.02.2016, 13:16  [ТС] #9
Usaga,
Код
System.Data.Entity.Infrastructure.DbUpdateException не обработано
  HResult=-2146233087
  Message=При обновлении записей произошла ошибка. Подробные сведения см. во внутреннем исключении.
  Source=EntityFramework
  StackTrace:
       в System.Data.Entity.Internal.InternalContext.SaveChanges()
       в System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
       в System.Data.Entity.DbContext.SaveChanges()
       в Procat.MainWindow.Save_Click(Object sender, RoutedEventArgs e) в D:\Procat\Procat\MainWindow.xaml.cs:строка 71
       в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
       в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
       в System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
       в System.Windows.Controls.Primitives.ButtonBase.OnClick()
       в System.Windows.Controls.Button.OnClick()
       в System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
       в System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
       в System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
       в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
       в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
       в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       в System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
       в System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
       в System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
       в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
       в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
       в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
       в System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
       в System.Windows.Input.InputManager.ProcessStagingArea()
       в System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
       в System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
       в System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
       в System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       в System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
       в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
       в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
       в System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
       в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
       в System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
       в System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
       в System.Windows.Application.RunDispatcher(Object ignore)
       в System.Windows.Application.RunInternal(Window window)
       в System.Windows.Application.Run(Window window)
       в System.Windows.Application.Run()
       в Procat.App.Main() в D:\Procat\Procat\obj\Debug\App.g.cs:строка 0
       в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       в System.Threading.ThreadHelper.ThreadStart()
  InnerException: 
       HResult=-2146233087
       Message=При обновлении записей произошла ошибка. Подробные сведения см. во внутреннем исключении.
       Source=System.Data.Entity
       StackTrace:
            в System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
            в System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
            в System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
            в System.Data.Entity.Internal.InternalContext.SaveChanges()
       InnerException: 
            Class=14
            ErrorCode=-2146232060
            HResult=-2146232060
            LineNumber=1
            Message=Violation of PRIMARY KEY constraint 'PK__tmp_ms_x__3214EC0704A01891'. Cannot insert duplicate key in object 'dbo.Procatoff'. The duplicate key value is (0).
The statement has been terminated.
            Number=2627
            Procedure=""
            Server=(LocalDB)\MSSQLLocalDB
            Source=.Net SqlClient Data Provider
            State=1
            StackTrace:
                 в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
                 в System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
                 в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
                 в System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
                 в System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
                 в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
                 в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
                 в System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
                 в System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
                 в System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
                 в System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
            InnerException:
0
OwenGlendower
Модератор
Эксперт .NET
7702 / 6670 / 2477
Регистрация: 17.03.2014
Сообщений: 13,042
Записей в блоге: 1
09.02.2016, 13:32 #10
Цитата Сообщение от Andrey221 Посмотреть сообщение
Violation of PRIMARY KEY constraint 'PK__tmp_ms_x__3214EC0704A01891'. Cannot insert duplicate key in object 'dbo.Procatoff'. The duplicate key value is (0). The statement has been terminated.
Это и есть причина ошибки. Сделай поле автоинкрементным.
0
Andrey221
0 / 0 / 0
Регистрация: 04.02.2016
Сообщений: 22
09.02.2016, 14:48  [ТС] #11
OwenGlendower, а это как хД автоинкрементным.

Добавлено через 1 минуту
OwenGlendower, У меня сейчас

Код
CREATE TABLE [dbo].[Procatoff] (
    [Id]          INT            NOT NULL,
    [FIO]         NVARCHAR (MAX) NOT NULL,
    [Telefon]     NVARCHAR (50)  NOT NULL,
    [age]         DATE           NOT NULL,
    [Car_Name]    NVARCHAR (50)  NOT NULL,
    [Dataprocata] DATE           NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
0
karat39
6 / 6 / 2
Регистрация: 09.02.2016
Сообщений: 137
09.02.2016, 14:51 #12
SQL
1
[Id]          INT IDENTITY(1, 1)           NOT NULL
0
OwenGlendower
Модератор
Эксперт .NET
7702 / 6670 / 2477
Регистрация: 17.03.2014
Сообщений: 13,042
Записей в блоге: 1
09.02.2016, 15:00 #13
Andrey221, про автоинкремент karat39 уже ответил, я же хочу обратить внимание на колонку FIO. Зачем ей тип NVARCHAR(max)? Это же 2 Гб данных. Сделай более разумный размер по аналогии с Telefon и Car_name.
0
ILKarina
17 / 17 / 4
Регистрация: 06.03.2013
Сообщений: 330
Завершенные тесты: 2
10.02.2016, 02:11 #14
OwenGlendower, все дело в кодировке. Если использовать varchar, то иногда будешь вместо кириллицы(или как там русские буквы называются?) будешь получать "?". А вот на колонке telephone можно использовать и int

Добавлено через 4 минуты
Аааа... Только увидел, вы про размер поля, а не тип. Ну да тут нельзя с вами не согласиться
0
karat39
6 / 6 / 2
Регистрация: 09.02.2016
Сообщений: 137
10.02.2016, 02:15 #15
SQL
1
[FIO]         NVARCHAR (60) COLLATE Cyrillic_General_CI_AS NOT NULLL
0
10.02.2016, 02:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2016, 02:15
Привет! Вот еще темы с ответами:

Вылетает 1С 8 - 1С
Подскажите пожалуста, в чем причина вылета 1с 8 при формировании Оборотносальдовой ведомости? И как это исправить.

Вылетает VB - Visual Basic
Импортирую компонент Microsoft Terminal Service Control Type Library Вот весь код: Private Sub Command1_Click() MsRdpClient51.Server...

Вылетает 1с.77 - 1С
Всем привет. имеем 1с77 0,27 конфигурация бухгалтерия конфигурация типовая. у 2х пользователей начали вылетать программы. В винде в журнале...

1C 8.x Вылетает 1С - 1С
Добрый день. Платформа 2.0 (версия самая последняя, не помню какая, скачана 03.01.2015) Программа вылетает в процессе работы. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.