Member 13999803 Ответов: 2

Ошибка заключается в том, что microsoft.oledb.12.0 не зарегистрирован на вашем локальном компьютере


у меня ОС Windows 10 64 разрядная система.в этой системе установлен Microsoft Access 2007 представляет. мой код таков
Попробуй
Dim MyConnection As System.Data.Oledb для.Метод oledbconnection
Dim myCommand как новая система.Data.Oledb для.Объект oledbcommand
Dim sql как строка

MyConnection = Новая Система.Data.Oledb для.Метод oledbconnection("поставщик=Майкрософт.Джет.Oledb для.12.0;Источник Данных='" + HistPath + "Message_History.xls\'; Расширенные Свойства=В Excel 8.0;")

MyConnection.Открыть()
моя команда.Соединение = MyConnection
Если (тип = "S"), то
среда SQL = "вставить в [успех$] значения('" &амп; назначения &ампер; "','" &амп; messg &ампер; "','" &амп; errormsg &ампер; "','" & система.значение datetime.Сейчас & "')"
Еще
среда SQL = "вставить в [ошибка$] значения('" &амп; назначения &ампер; "','" &амп; messg &ампер; "','" &амп; errormsg &ампер; "','" & система.значение datetime.Сейчас & "')"
Конец, Если

моя команда.CommandText = sql
моя команда.Метод executenonquery()
MyConnection.Закрывать()
Поймать ex как исключение
С помощью MsgBox(исх.Метод toString)
Конец Попытки

Что я уже пробовал:

plz решите мою проблему.я столкнулся с проблемой с этим.уже я изменил встроенный с любого процессора на x86

ZurdoDev

Вы гуглили ошибку?

2 Ответов

Рейтинг:
4

Dave Kreskowiak

Имя поставщика, которое вы указали, "Microsoft.Jet.OLEDB.12.0", никогда не существовало. Я не знаю, откуда вы это взяли, но это совсем не так.

Старый поставщик JET назывался "Microsoft.Jet.OLEDB.4.0". Это относится к базам данных Access в более старом формате Access 2003 и ниже.

Правильное имя поставщика для Access 2007 и выше - "Microsoft.ACE.OLEDB.12.0".


Member 13999803

При смене двигателя до туза там Исан ошибок, как системы.Данных.Oledb для.OleDbexception:themicrosoft office access database engine не удалось найти объект 'Success$'

Dave Kreskowiak

У вас точно такая же проблема. Я дал вам два возможных имени поставщика для использования, и вы, опять же, пошли с вариантом 3, недопустимым именем.

Member 13999803

Система Импорта
Система Импорта.Сведения
Импорт System.Net
Система Импорта.ИО


Публичный Класс SendMsg
Public Shared connectionURL As String = String.Пустой
Общие имя пользователя, строка = строка.Пустой
Общедоступный общий пароль в виде String = String.Пустой
Общие тип как String = строка.Пустой
Public Shared dlr As String = строка.Пустой
Общедоступный общий источник в виде String = String.Пустой
Public Shared CompleteURL As String = String.Пустой
Public Shared HistPath As String = String.Пустой
Общие Состояния, Как Класс Httpwebresponse
"'<резюме>
"Инициализировать connectionURL
''' 0
"'<param name="URI">
"<замечания>
Общие суб SetURL(Ури бывал в строку, как строку ссылку бывал, бывал pswd как струна, бывал тп, как струна, бывал дл как струна, бывал src как струна, histp бывал в строку)
connectionURL = URI
имя пользователя = ссылку
пароль = pswd
тип = tp
dlr = dl
источник = src
HistPath = histp
Конец Подводной Лодки
"'<резюме>
''' посылка сообщения
'''
"'<param name="Dest">
"'<param name="msg">
"<замечания>
Общие суб StartMsgSend(бывал Дест как струна, бывал Сообщение Как строку)
'Dim SourceStream As System.IO.Stream
'Дим файл myrequest как системы.Нет.Запросы WebRequest = Запросы WebRequest.Создать(connectionURL)
- моя просьба.Учетные Данные = CredentialCache.Свойство defaultcredentials
'Дим метода webresponse как метода webresponse = файл myrequest.Творческий
'SourceStream = webResponse.GetResponseStream()
'Дим читателя, что streamreader = Новый Поток streamreader(метода webresponse.GetResponseStream())
CompleteURL = connectionURL + "?имя пользователя=" + логин + "&усилителя;пароль=" + пароль + "&амп;тип=" + тип + "&амп;длр=" + ЭБР + "&амп;пунктом=" &амп; приемник &усилитель; amp; "&Источник=" + Источник + "&амп;сообщение=" &амп; глутамат натрия &амп; ""

"CompleteURL = connectionURL + "?loginID=" + логин + "&усилителя;пароль=" + пароль + "&амп;мобильного=" &амп; приемник &усилитель; amp; "&амп;текст=" &амп; глутамат натрия &ампер; "&амп;senderid=" + источник + "&амп;route_id=" + тип + "&амп;Юникод=" + ЭБР + ""


Попробуй
'Создает HttpWebRequest с указанным URL-адресом.
Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create(CompleteURL), HttpWebRequest)
- Посылает запрос и ждет ответа.
Дим myHttpWebResponse как класс httpwebresponse = ctype для(myHttpWebRequest.Метод GetResponse(), Класс Httpwebresponse)
Состояния = myHttpWebResponse
Если myHttpWebResponse.StatusCode = HttpStatusCode.Тогда ладно
writexcel(Dest, msg, "S", myHttpWebResponse.Описание состояния.Метод toString)
Еще
writexcel(Dest, msg, "E", myHttpWebResponse.Описание состояния.Метод toString)
Конец, Если
- Высвободите ресурсы ответа.
myHttpWebResponse.Закрывать()

Поймать е в качестве исключения webexception
writexcel(Dest, msg, "E", e.Message)
Catch e как исключение
writexcel(Dest, msg, "E", e.Message)
Конец Попытки

Конец Подводной Лодки


Общие суб writexcel(пунктом бывал в строку, как строку messg бывал, бывал тип как String, errormsg бывал в строку)
Попробуй
Dim MyConnection As System.Data.Oledb для.Метод oledbconnection
Dim myCommand как новая система.Data.Oledb для.Объект oledbcommand
Dim sql как строка

MyConnection = Новая Система.Data.Oledb для.Метод oledbconnection("поставщик=Майкрософт.Туз.Oledb для.4.0;Источник Данных='" + HistPath + "Message_History.xls\'; Расширенные Свойства=В Excel 8.0;")

MyConnection.Открыть()
моя команда.Соединение = MyConnection
Если (тип = "S"), то
среда SQL = "вставить в [успех$] значения('" &амп; назначения &ампер; "','" &амп; messg &ампер; "','" &амп; errormsg &ампер; "','" & система.значение datetime.Сейчас & "')"
Еще
sql = "вставить

Рейтинг:
16

OriginalGriff

Это говорит - довольно ясно - что движок JET DB не установлен на компьютере (и вы, вероятно, не должны использовать JET в любом случае, он был заменен ACE много лет назад и никогда не будет доступен в 64-битной версии).

Но это не самая худшая из ваших ошибок: никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?


Member 13999803

При смене двигателя до туза там Исан ошибок, как системы.Данных.Oledb для.OleDbexception:themicrosoft office access database engine не удалось найти объект 'Success$'

Member 13999803

Система Импорта
Система Импорта.Сведения
Импорт System.Net
Система Импорта.ИО


Публичный Класс SendMsg
Public Shared connectionURL As String = String.Пустой
Общие имя пользователя, строка = строка.Пустой
Общедоступный общий пароль в виде String = String.Пустой
Общие тип как String = строка.Пустой
Public Shared dlr As String = строка.Пустой
Общедоступный общий источник в виде String = String.Пустой
Public Shared CompleteURL As String = String.Пустой
Public Shared HistPath As String = String.Пустой
Общие Состояния, Как Класс Httpwebresponse
"'<резюме>
"Инициализировать connectionURL
''' 0
"'<param name="URI">
"<замечания>
Общие суб SetURL(Ури бывал в строку, как строку ссылку бывал, бывал pswd как струна, бывал тп, как струна, бывал дл как струна, бывал src как струна, histp бывал в строку)
connectionURL = URI
имя пользователя = ссылку
пароль = pswd
тип = tp
dlr = dl
источник = src
HistPath = histp
Конец Подводной Лодки
"'<резюме>
''' посылка сообщения
'''
"'<param name="Dest">
"'<param name="msg">
"<замечания>
Общие суб StartMsgSend(бывал Дест как струна, бывал Сообщение Как строку)
'Dim SourceStream As System.IO.Stream
'Дим файл myrequest как системы.Нет.Запросы WebRequest = Запросы WebRequest.Создать(connectionURL)
- моя просьба.Учетные Данные = CredentialCache.Свойство defaultcredentials
'Дим метода webresponse как метода webresponse = файл myrequest.Творческий
'SourceStream = webResponse.GetResponseStream()
'Дим читателя, что streamreader = Новый Поток streamreader(метода webresponse.GetResponseStream())
CompleteURL = connectionURL + "?имя пользователя=" + логин + "&усилителя;пароль=" + пароль + "&амп;тип=" + тип + "&амп;длр=" + ЭБР + "&амп;пунктом=" &амп; приемник &усилитель; amp; "&Источник=" + Источник + "&амп;сообщение=" &амп; глутамат натрия &амп; ""

"CompleteURL = connectionURL + "?loginID=" + логин + "&усилителя;пароль=" + пароль + "&амп;мобильного=" &амп; приемник &усилитель; amp; "&амп;текст=" &амп; глутамат натрия &ампер; "&амп;senderid=" + источник + "&амп;route_id=" + тип + "&амп;Юникод=" + ЭБР + ""


Попробуй
'Создает HttpWebRequest с указанным URL-адресом.
Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create(CompleteURL), HttpWebRequest)
- Посылает запрос и ждет ответа.
Дим myHttpWebResponse как класс httpwebresponse = ctype для(myHttpWebRequest.Метод GetResponse(), Класс Httpwebresponse)
Состояния = myHttpWebResponse
Если myHttpWebResponse.StatusCode = HttpStatusCode.Тогда ладно
writexcel(Dest, msg, "S", myHttpWebResponse.Описание состояния.Метод toString)
Еще
writexcel(Dest, msg, "E", myHttpWebResponse.Описание состояния.Метод toString)
Конец, Если
- Высвободите ресурсы ответа.
myHttpWebResponse.Закрывать()

Поймать е в качестве исключения webexception
writexcel(Dest, msg, "E", e.Message)
Catch e как исключение
writexcel(Dest, msg, "E", e.Message)
Конец Попытки

Конец Подводной Лодки


Общие суб writexcel(пунктом бывал в строку, как строку messg бывал, бывал тип как String, errormsg бывал в строку)
Попробуй
Dim MyConnection As System.Data.Oledb для.Метод oledbconnection
Dim myCommand как новая система.Data.Oledb для.Объект oledbcommand
Dim sql как строка

MyConnection = Новая Система.Data.Oledb для.Метод oledbconnection("поставщик=Майкрософт.Туз.Oledb для.4.0;Источник Данных='" + HistPath + "Message_History.xls\'; Расширенные Свойства=В Excel 8.0;")

MyConnection.Открыть()
моя команда.Соединение = MyConnection
Если (тип = "S"), то
среда SQL = "вставить в [успех$] значения('" &амп; назначения &ампер; "','" &амп; messg &ампер; "','" &амп; errormsg &ампер; "','" & система.значение datetime.Сейчас & "')"
Еще
sql = "вставить