Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема OleDb  и вставка данных в mssql ce (число прочтений - 3103 )
Dimitry
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 9
Зарегистрирован: 21. Апреля 2008
OleDb  и вставка данных в mssql ce
13. Ноября 2008 :: 16:55
Печать  
не получается выполнить вставку данных через подготовленный запрос, может чего подкорректировать надо или я не прав в чем ...
Код
Выбрать все
Процедура Сформировать()
	Соед = СоздатьОбъект("OLEDBData");
	СтрокаСоед = "Provider=Microsoft.SQLSERVER.MOBILE.OLEDB.3.0;Data Source=" + КаталогИБ() +"database1.sdf;";
	Есть = Соед.Соединение(СтрокаСоед);
	Если ФС.СуществуетФайл(КаталогИБ() + "ARH_KPK\data.sdf")  = 1 Тогда
		ФС.УдалитьФайл(КаталогИБ() + "ARH_KPK\data.sdf");
	КонецЕсли;
	Команда=Соед.СоздатьКоманду();
	Команда.УстановитьКаталогВремТаблиц(КаталогИБ()+ "ARH_KPK\");
	Команда.ВыполнитьИнструкцию("CREATE DATABASE "+""""+КаталогИБ() +"ARH_KPK\data.sdf""");
	Соед.Закрыть();
	СтрокаСоед = "Provider=Microsoft.SQLSERVER.MOBILE.OLEDB.3.0;Data Source=" + КаталогИБ() +"ARH_KPK\data.sdf;";
	Есть = Соед.Соединение(СтрокаСоед);
	Команда=Соед.СоздатьКоманду();
	Команда.УстановитьКаталогВремТаблиц(КаталогИБ()+ "ARH_KPK\");

	Команда.ВыполнитьИнструкцию("CREATE TABLE clients (Dolg nchar(18))");

	ТекстЗапроса = "Insert into clients (Dolg) Values(?)";

	Команда.ДобПараметр(1, 129, 18, 0);
	Команда.Подготовить(ТекстЗапроса);

	Для н=1 по 3 Цикл
		Команда.УстановитьПараметр(1, "sss");
		Команда.Выполнить();
	КонецЦикла;

	Команда.ОтменитьПодготовку();

КонецПроцедуры
 



пишет:
Код
Выбрать все
Команда.Подготовить(ТекстЗапроса);
{C:\ПРОБА.ERT(23)}: FAILED! ICommandWithParameters::SetParameterInfo() (BADTYPENAME): The given type name was unrecognized. [,,,,,] 



но если выполнять вставку данных без подготовки запроса (просто через insert) то все прекрасно работает.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: OleDb  и вставка данных в mssql ce
Ответ #1 - 13. Ноября 2008 :: 17:45
Печать  
А если так:
Код
Выбрать все
ТекстЗапроса = "Insert into clients (Dolg) Values(CAST(? as nchar(18)))"; 

  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: OleDb  и вставка данных в mssql ce
Ответ #2 - 14. Ноября 2008 :: 05:20
Печать  
А если так:
Код
Выбрать все
Команда.ДобПараметр(1, 130, 18, 0); 

  
Наверх
ICQ  
IP записан
 
Dimitry
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 9
Зарегистрирован: 21. Апреля 2008
Re: OleDb  и вставка данных в mssql ce
Ответ #3 - 14. Ноября 2008 :: 10:30
Печать  
не помогло Печаль
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: OleDb  и вставка данных в mssql ce
Ответ #4 - 14. Ноября 2008 :: 11:22
Печать  
говорят, проблемы у этой версии провайдера с параметрами: http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2140307&SiteID=17
  
Наверх
ICQ  
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: OleDb  и вставка данных в mssql ce
Ответ #5 - 14. Ноября 2008 :: 12:57
Печать  
а если так:
Код
Выбрать все
Conn=СоздатьОбъект("ADODB.Connection");
RecSet=СоздатьОбъект("ADODB.Recordset");
Conn.ConnectionString = ="+SQL_db;
Conn.ConnectionTimeout = 32535;
Conn.CommandTimeout=32535;
cmdSQL=CreateObject("ADODB.Command");
cmdSQL.CommandTimeout=32535;
Попытка
    Conn.Open();
Исключение
    Предупреждение("Не удалось подключиться к базе"+SQL_db);
    Возврат;
КонецПопытки;
RecSet.ActiveConnection=Conn;
RecSet.CursorType = 3;
RecSet.CacheSize=65535; 



Желтым выделен обязательный параметр для возможности модификации данных.
  
Наверх
 
IP записан
 
Dimitry
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 9
Зарегистрирован: 21. Апреля 2008
Re: OleDb  и вставка данных в mssql ce
Ответ #6 - 18. Ноября 2008 :: 08:42
Печать  
Задача решена:
Код
Выбрать все
Процедура Сформировать1()
	Conn=СоздатьОбъект("ADODB.Connection");
	Conn.ConnectionString = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=" + КаталогИБ() +"ARH_KPK\data1.sdf;";
	cmdSQL=CreateObject("ADODB.Command");
	Попытка
		Conn.Open();
	Исключение
		Предупреждение("Не удалось подключиться к базе");
		Возврат;
	КонецПопытки;
	cmdSQL.ActiveConnection = Conn;
	ТекстЗапроса = "Insert into clients (dolg) Values(?)";
	cmdSQL.prepared=1;
	cmdSQL.CommandText = Текстзапроса;
	aa = cmdSQL.CreateParameter("dddd",130,1,18,);
	cmdSQL.Parameters.Append(aa);

	Начало = _GetPerformanceCounter();
	Для н=1 По 1000000 Цикл
		aa.Value=н;
		cmdSQL.Execute(,,128);
	КонецЦикла;
	ВремяОбработки = "Время: "+строка(Цел((_GetPerformanceCounter() - Начало)/1000));
	Сообщить(ВремяОбработки,"!");
КонецПроцедуры
 



Прирост производительности составил 40%!!!
Всем спасибо  Подмигивание
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать