Рейтинг:
1
Richard MacCutchan
Скорее всего, что предыдущее SELECT INTO
команда не создала данные, которые вы ожидаете. Вам нужно проверить возвращаемое значение от каждого вызова к ExecuteNonQuery
чтобы убедиться, что это удалось.
MKP75
Спасибо за ответ. Оператор Select into Temp1 создает таблицу Temp1 в базе данных access, и данные также вставляются в таблицу Temp1 из CSV-файла.
Затем он приходит к Insert into MaterialRegister оператор после этого ошибка выбрасывается на ExecuteNonQuery оператор.
На самом деле код работал первые 2 раза, а затем начал выдавать ошибку.
Richard MacCutchan
Хорошо, но единственный способ узнать, почему возникает ошибка, - это использовать отладчик для проверки обрабатываемых данных. И, как я уже говорил ранее, проверьте возвращаемые значения из ваших системных/библиотечных вызовов. Не думайте, что только потому, что они не бросают исключение, что они сделали то, что вы думаете.
MKP75
Dim querryStr1 как строка
MKP75
Спасибо, я сделаю это и вернусь. Спасибо
MKP75
Вот что я получаю, когда отлаживаю программу
'MiniAGApp.exe' (CLR v4.0.30319: DefaultDomain): загружен 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: DefaultDomain): загружен 'C:\Users\Mihir\Documents\Visual студия 2017\Projects\MiniAGApp\MiniAGApp\bin\Debug\MiniAGApp.exe". Символы загружены.
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): загружено 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.VisualBasic\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualBasic.dll'. Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System-да.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System-да.Окна.Формы\v4.0_4.0.0.0__b77a5c561934e089\система.Окна.Forms.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System-да.Чертеж\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.Drawing.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime-да.Дистанционное управление\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Remoting.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): загружено 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll'. Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): загружено 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll'. Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System-да.Цифры\v4.0_4.0.0.0__b77a5c561934e089\система.Numerics.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System-да.Конфигурация\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.Configuration.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Транзакции\v4.0_4.0.0.0__b77a5c561934e089\система.Transactions.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (CLR v4.0.30319: MiniAGApp.exe): заряжен 'C:\Windows\Microsoft.Net\assembly\GAC_32\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.EnterpriseServices.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'MiniAGApp.exe' (среда CLR версии 4.0.30319: мин
Richard MacCutchan
Это не отладочная информация. Вам нужно установить точку останова в своем коде и пошагово просмотреть, какие данные обрабатываются на каждом шаге и каков результат каждого из системных вызовов.
MKP75
Я поставил точку останова на 4 строках, то есть querrystr, cmd = New OleDbCommand(querryStr, conn), conn.Откройте() и cmd.Метод executenonquery()
Ниже приведено то, что я получаю
Необработанное Исключение: Система.AccessViolationException: попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена.
в System.Data.Общий.Небезопасные методы.Icommandtext для.Выполнить(указателя IntPtr pUnkOuter, идентификатор GUID&амп; riid, tagDBPARAMS pDBParams, указателя IntPtr&амп; pcRowsAffected, объект&амп; ppRowset)
в System.Data.Oledb для.Объект oledbcommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
в System.Data.Oledb для.Объект oledbcommand.ExecuteCommandText(Object& executeResult)
в System.Data.Oledb для.Объект oledbcommand.Метод executecommand(поведение метода commandbehavior, объект&амп; executeResult)
в System.Data.Oledb для.Объект oledbcommand.ExecuteReaderInternal(поведение CommandBehavior, строковый метод)
в System.Data.Oledb для.Объект oledbcommand.Метод executenonquery()
в MiniAGApp.ImportData1.btnImport_Click(отправитель объекта, EventArgs e) в C:\Users\Mihir\Documents\Visual Studio 2017\Projects\MiniAGApp\MiniAGApp\Form14.vb:строка 92
в системе.Окна.Формы.Контроль.OnClick(EventArgs e)
в системе.Окна.Формы.Кнопка.OnClick(EventArgs e)
в системе.Окна.Формы.Кнопка.OnMouseUp(MouseEventArgs mevent)
в системе.Окна.Формы.Контроль.WmMouseUp(Message& m, кнопка MouseButtons, Int32 клика)
в системе.Окна.Формы.Контроль.WndProc(сообщение& m)
в системе.Окна.Формы.ButtonBase.WndProc(сообщение& m)
в системе.Окна.Формы.Кнопка.WndProc(сообщение& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.OnMessage(сообщение& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.WndProc(сообщение& m)
в системе.Окна.Формы.Родное окно.DebuggableCallback(hwnd элемента указателя IntPtr, int32 и глутамат натрия, указателя IntPtr параметр wparam, указателя IntPtr lparam должен)
в системе.Окна.Формы.Небезопасные методы.DispatchMessageW(MSG& msg)
в системе.Окна.Формы.Приложение.ComponentManager.Система.Окна.Формы.Небезопасные методы.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoopInner(Int32 причина, контекст ApplicationContext)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoop(Int32 причина, контекст ApplicationContext)
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Онран()
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(строка[] командная строка)
в MiniAGApp.My.MyApplication.Main(String[] Args) in :строка 81
Программа '[6108] MiniAGApp.exe' вышел с кодом 0 (0x0).
Richard MacCutchan
Очевидно, что проблема возникает до того, как она достигнет точки останова, поэтому вам нужно остановить ее раньше.
MKP75
привет. Я попытался отладить каждую строку кода этой конкретной формы. Нет никаких ошибок или исключений, за исключением
Система Visual studio 2017.AccessViolationException 'попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена.'
на cmd.Оператор ExecuteNonQuery ().
Я этого не понимаю.
Я даже пытался вставить данные из DataGridview1 один за другим, но та же ошибка
происходит на cmd.Строка ExecuteNonQuery.
Есть ли другой способ сделать это? Пожалуйста, совет. Я застрял.
Richard MacCutchan
Извините, но без вашего кода и всех данных это невозможно. И, как я уже не раз говорил, вам нужно посмотреть на переменные, которые используются кодом. Нарушения доступа вызываются попыткой чтения или записи с недопустимого адреса памяти, что обычно означает неверное значение параметра, передаваемое системному вызову. Но только вы можете определить, что это за ценность.
И, пожалуйста, постарайтесь перестать публиковать свои комментарии дважды. Если система работает медленно, она не работает лучше, перепечатывая.
MKP75
Хорошо. Большое спасибо.
MKP75
Привет.
Проблема решена. Как вы сказали, я продолжал смотреть глубже в программу и прибил ее.
Ниже приведена рабочая программа для вашей справки.
Система Импорта.ИО
Система Импорта.Сведения
Импортирует System.Data.Для oledb
Открытый Класс ImportData1
Дим Конн как новый объект oledbconnection(“поставщик=Майкрософт.Туз.Oledb для.12.0;Источник Данных=С:\Пользователи\\Mihir Документы\MiniAGAppDB.# то#; сохранять сведения о безопасности=true в”)
Dim cmd как OleDbCommand
Dim querryStr1 как строка
Dim querryStr2 как строка
Dim querryStr3 как строка
Частная суб ImportData1_Load(отправителя как объект, а равно EventArgs) обрабатывает ключевое слово mybase.Загрузить
TxtFilePath.Text = "поместите свой файл в D:\FileToImport папка. Имя файла должно быть MatRegFile.csv"
Конец Подводной Лодки
Private Sub BtnCancel_Click(sender As Object, e As EventArgs) обрабатывает btnCancel.Щелчок
Меня.Рядом()
Конец Подводной Лодки
Private Sub BtnShow_Click(sender As Object, e As EventArgs) обрабатывает btnShow.Щелчок
Попробуй
Коннектикут.Открыть()
Дим практическое руководство как объекта DataTable = соед.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Таблицы, Новый Объект() {Ничего, ничего, "Temp1", "таблица"})
Коннектикут.Закрывать()
Ящик для сообщений.Показать(практическое руководство.Строк.Рассчитывать)
Если дбщема.строк.Тогда считайте > 0
querryStr1 = "Drop Table Temp1"
cmd = New OleDbCommand(querryStr1, conn)
Коннектикут.Открыть()
УМК.Метод executenonquery()
Коннектикут.Закрывать()
querryStr2 = "выбрать * в Temp1 из [текста;ДРМ=разграничена;базы данных=D:\в FileToImport;режим HDR=да].[MatRegFile.csv]"
cmd = New OleDbCommand(querryStr2, conn)
Коннектикут.Открыть()
УМК.Метод executenonquery()
Коннектикут.Закрывать()
Еще
querryStr2 = "выбрать * в Temp1 из [текста;ДРМ=разграничена;базы данных=D:\в FileToImport;режим HDR=да].[MatRegFile.csv]"
cmd = New OleDbCommand(querryStr2, conn)
Коннектикут.Открыть()
УМК.Метод executenonquery()
Коннектикут.Закрывать()
Конец, Если
'Показать Данные Из Temp1 В Таблице Данных
Дим objda как объект oledbdataadapter = новый объект oledbdataadapter
Дим кон как новый oledb для.Метод Oledbconnection(“Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник Данных=С:\Пользователи\\Mihir Документы\MiniAGAppDB.# то#; сохранять сведения о безопасности=true в”)
Дим objdataset как набор данных = новый набор данных
Dim dv как DataView
против.Открыть()
обьда.SelectCommand = New OleDbCommand("Select * From Temp1", con)
objda.Fill(objdataset, "Temp1")
dv = New DataView(objdataset.Таблицы("Temp1"))
DataGridView1.Источник данных = ДВ
против.Закрывать()
против.Располагать()
Поймать ex как исключение
Ящик для сообщений.Показать(напр.сообщение)
Коннектикут.Закрывать()
Конец Попытки
Конец Подводной Лодки
Private Sub btnImport_Click(sender As Object, e As EventArgs) обрабатывает btnImport.Щелчок
Коннектикут.Открыть()
Дим практическое руководство как объекта DataTable = соед.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Таблицы, Новый Объект() {Ничего, ничего, "Temp1", "таблица"})
Коннектикут.Закрывать()
Попробуй
Коннектикут.Открыть()
Для каждого rw как DataGridViewRow в DataGridView1.Rows
Если rw.Ячейки(1).Значение <> "" Тогда
cmd = New OleDbCommand("Insert Into MaterialRegister (Company_Code,Company_Name,Material_Code,Material_Name,Credit_Qty,Debit_Qty,Material_Count,Material_Flag,Material_Date,Material_Inv_No,Material_Party_Code,Material_Party_Name,Remark,Entry_Flag,Creation_Date,User_Name) values ('" & rw.Cells(1).Value & "','" & rw.Cells(2).Value & "','" & rw.Cells(3).Value & "','" & rw.Cells(4).Value & "','" & rw.Cells(5).Value & "','" & rw.Cells(6).Value & "','" & rw.Cells(7).Value & "','" & rw.Cells(8).Value & "','" & rw.Cells(9).Value & "','" & rw.Cells(10).Value &am