Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2016, 08:16   #1
elaxblackfox
 
Регистрация: 09.06.2014
Сообщений: 9
Восклицание VS C++/CLI добавить данные в бд запросом

Доброго времени суток.
Проблема такая, создаю проект С++/CLI в vs 2008 т.к. там работает Ctrl+пробел для подсказок. Мне необходимо данные с textbox-ов занести в базу данных Аксесс. Форму и элементы на ней создаю с помощью графических средств. Подключаю oleDbDataAdapter1 и там же настраиваю oleDbConnection1 путь к своей бд.
Это создаёт мастер:
Код HTML:
this->components = (gcnew System::ComponentModel::Container());
            System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
            this->oleDbConnection1 = (gcnew System::Data::OleDb::OleDbConnection());
// oleDbConnection1
            // 
            this->oleDbConnection1->ConnectionString = L"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Rabota\\Mydb.accdb";
            // 
// oleDbInsertCommand1
            // 
            this->oleDbInsertCommand1->CommandText = L"INSERT INTO `tbl_j_product` (`Название`, `Цена`, `характеристики`) VALUES (\?, \?, " 
                L"\?)";
Я по нашёл различные варианты на С# и пытался их переписать на С++ В шарпе "." а в С++ "->" и другие мелкие отличия но направления мысли схожее.
Обрабатываю событие нажатие кнопки:
C++
Код HTML:
             System::Data::OleDb::OleDbCommand^  oleDbCommand;
             oleDbCommand->Connection=this->oleDbConnection1;
             oleDbCommand->CommandText="INSERT INTO `tbl_rabota` (`Детали`, `Кол-во_сделанного`, `Дата`, `Брак_кол-во`) VALUES ("+ this->textBox4->Text +" , "+ this->textBox1->Text +" ,"+  this->dateTimePicker1->Value.ToShortDateString() +" ,"+  this->textBox3->Text +")";
             oleDbCommand->ExecuteNonQuery();
             
 
            // this->oleDbConnection1->Open();
            // this->oleDbInsertCommand3->CommandText = "INSERT INTO `tbl_rabota` (`Детали`, `Кол-во_сделанного`, `Дата`, `Брак_кол-во`) VALUES (" + "textBox4->Text +" , "+ textBox1->Text +" ,"+  dateTimePicker1->Value.ToShortDateString +" ,"+  textBox3->Text +")";    
            // this->oleDbInsertCommand3->ExecuteNonQuery();
            // this->oleDbConnection1->Close();
Компилирую программу и при попытке добавить таки записи, возникает следующая ошибка:

Необработанное исключение типа "System.NullReferenceException" произошло в System.Data.dll

Дополнительные сведения: В экземпляре объекта не задана ссылка на объект.
Помогите добавить таки данные в бд с textbox-ов.
Добавление и удаление через DataGridView работает хорошо, только при DataAdapter1->Update(tbl_product); приходится сначала сделать шаг на предыдущую запись и тогда сохраняет.

Очень прошу помочь, недавно перешёл с консольных программ на графический интерфейс.
elaxblackfox вне форума Ответить с цитированием
Старый 28.03.2016, 09:55   #2
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Вы не инициализируете переменную oleDbCommand.
Почитайте: https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx
koljsch вне форума Ответить с цитированием
Старый 28.03.2016, 10:32   #3
elaxblackfox
 
Регистрация: 09.06.2014
Сообщений: 9
По умолчанию

koljsch
Спасибо я использовал вариант ниже который был закомментирован.
Возник другой вопрос. textbox1 у меня связан с через bildingSource с таблицей в которую я добавляю данные с полем которое является подстановкой из другой таблицы. Т.е. в поле при добавлении открывается список деталей и пользователь выбирает из списка нужную. Мне же нужно добавлять в таблицу не текст, а id номер из связанной таблицы. Я организовал так создал ещё 1 textbox4 и связал его с id нужной таблицы. При выборке в textbox1 меняется и textbox4 на нужный id, его я и добавляю запросом в таблицу. И вот вопрос) когда я делаю textbox4 невидимым visible=false, возникает ошибка
"Необработанное исключение типа "System.FormatException" произошло в mscorlib.dll
Дополнительные сведения: Входная строка имела неверный формат."
Если делаю видимым, то всё работает хорошо. Как можно избавится от этой ошибки? Или можно иным способом получать id?
elaxblackfox вне форума Ответить с цитированием
Старый 28.03.2016, 11:32   #4
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

elaxblackfox, сложно понять о чем идет речь.
Либо выкладывайте весь проект, либо отладчиком проходите и смотрите что у Вас в textbox4, когда он невидим.
koljsch вне форума Ответить с цитированием
Старый 28.03.2016, 11:40   #5
elaxblackfox
 
Регистрация: 09.06.2014
Сообщений: 9
По умолчанию

http://my-files.ru/bp4dk9 вот ссылка на весь проект с бд и прочим. Я пока разбираюсь так что это можно сказать тест.
Если сделать textbox4 видимым то ошибки никакой нету, всё хорошо добавляется. Меня интересует как исправить эту ошибку либо иной способ добавить в связанную таблицу в поле с подстановкой
elaxblackfox вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как одним запросом добавить копию записи в таблицу? ЛюбительПИ Microsoft Office Access 5 28.10.2015 10:28
Как редактировать данные в таблице созданной запросом? majjestik C++ Builder 0 05.06.2013 21:55
Как исключить данные запросом? Вадичок Microsoft Office Access 9 16.09.2012 08:49
Выбрать данные из 2 таблиц одним запросом Linel SQL, базы данных 4 16.02.2011 15:29
Добавить строку в longtext одним Update запросом Alar SQL, базы данных 1 02.02.2011 18:11