Здравствуйте! Сегодня: Вт, 1 Дек 2020, Ваш IP: 18.232.146.10 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Базы данных
+ Создать новую тему Страница: 1
Тема: Запись данных в Access в С# · +  +  дата добавления: 07.07.2010 / 14:48
Автор темы:
Temur Yakubov
Temur Yakubov
тем: 4 / ответов: 5 / благодарностей: 0 / репутация: 0
ответов: 5
создал(а) тем: 4


Здравствуйте! У меня такая проблема. Мне нужно записать данные в БД Access в C#. Построил строку соединения с БД, открыл, создал новую строку в ДатаСет, инициализировал пункты, добавил строку (Add), ввожу данные в БД. Компиляция нормальная. Возникает ошибка в строке

OleDbDataAdapter1.Update(DataSet1, "Table1");

Ошибка в синтаксисе INSERT INTO.

Помогите пожалуйста
Технологии: C#, Microsoft Access
 
Ответ # 1 # · +  +  дата добавления: 07.07.2010 / 15:08
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Нужно больше кода, чтобы понять в чем там ошибка.

PS: Рекомендую также посмотреть этот сервис - http://db.foxtools.ru/ , там можно генерировать готовые классы для работы базами данных MS Access и MS SQL Server.
 
Ответ # 2 # · +  +  дата добавления: 08.07.2010 / 11:23
Автор ответа:
Temur Yakubov
Temur Yakubov
тем: 4 / ответов: 5 / благодарностей: 0 / репутация: 0
ответов: 5
создал(а) тем: 4


Код такой

string connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + @"\common\data\SRT.mdb";
      OleDbConnection thisConnection = new OleDbConnection(connectionstring);
      OleDbDataAdapter thisAdapter = new OleDbDataAdapter();
      thisAdapter.SelectCommand = new OleDbCommand("SELECT Login,Password FROM Table1", thisConnection);
      OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(thisAdapter);
      thisConnection.Open();
      DataSet thisDataSet = new DataSet();
      thisAdapter.Fill(thisDataSet,"Table1");
      DataRow thisRow = thisDataSet.Tables["Table1"].NewRow();
      //thisRow["Код"] = "0";
      thisRow["Login"] = logtextBox.Text;
      thisRow["Password"] = passtextBox.Text;
      thisDataSet.Tables["Table1"].Rows.Add(thisRow);
      // thisAdapter.ContinueUpdateOnError = true; 
      thisAdapter.Update(thisDataSet,"Table1");
      thisConnection.Close();
 
Ответ # 3 # · +  +  дата добавления: 08.07.2010 / 11:32
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Нужно прописать InsertCommand
OleDbDataAdapter1.InsertCommand = New OleDbCommand("INSERT INTO Table1 ([Login], [Password]) values (?, ?)", thisConnection)
и добавить все параметры
OleDbDataAdapter1.InsertCommand.Parameters.Add("@Login", OleDbType.VarChar, 255, logtextBox.Text)
в строгом порядке, как в запросе.
 
Ответ # 4 # · +  +  дата добавления: 09.07.2010 / 10:54
Автор ответа:
Temur Yakubov
Temur Yakubov
тем: 4 / ответов: 5 / благодарностей: 0 / репутация: 0
ответов: 5
создал(а) тем: 4


Заработало! Большое спасибо.
 
Ответ # 5 # · +  +  дата добавления: 26.07.2011 / 16:11
Автор ответа:
Mister_W
Mister_W
тем: 0 / ответов: 4 / благодарностей: 0 / репутация: 2
ответов: 4
создал(а) тем: 0


Код нерабочий, может зависит от VS? Сам запарился четыре кода и не один не фурычет. Да и еще выдается сообщение
.
"Необработанное исключение типа "System.NullReferenceException" произошло в DataForm.exe"

Код использовал следующий:
string connectionstring = "provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\clients.mdb";
   OleDbConnection thisConnection = new OleDbConnection(connectionstring);
   OleDbDataAdapter thisAdapter = new OleDbDataAdapter();
   thisAdapter.InsertCommand.CommandText = "INSERT INTO Users (User, [Password]) VALUES (" + this.userText + "," + this.passText + ")";
   thisConnection.Open();
   thisAdapter.InsertCommand.Connection = thisConnection;
   thisAdapter.InsertCommand.ExecuteNonQuery();
   thisConnection.Close();
Технологии: C#, Microsoft Access
 
Ответ # 6 # · +  +  дата добавления: 26.07.2011 / 16:22
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Возможно, нужно создать OleDbCommand, прежде чем работать с ним:
thisAdapter.InsertCommand = new OleDbCommand();
и SQL-запрос неверный
INSERT INTO Users (User, [Password]) VALUES (" + this.userText + "," + this.passText + ")
если делать так, то в конечном итоге sql будет вида:
INSERT INTO Users (User, [Password]) VALUES (вася,123)
нужно добавить кавычки, но лучше использовать параметры, как показано в 3 ответе.
 
Ответ # 7 # · +  +  дата добавления: 26.07.2011 / 16:41
Автор ответа:
Mister_W
Mister_W
тем: 0 / ответов: 4 / благодарностей: 0 / репутация: 2
ответов: 4
создал(а) тем: 0


Не совсем понятно что подразумевается под вопросительными знаками в этой строчке

OleDbDataAdapter1.InsertCommand = New OleDbCommand("INSERT INTO Table1 ([Login], [Password]) values (?, ?)", thisConnection)

Поскольку компилятор сочтет их как переменные по дефолту и выдаст еррор.
 
Ответ # 8 # · +  +  дата добавления: 26.07.2011 / 16:48
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Не совсем понятно что подразумевается под вопросительными знаками в этой строчке

OleDbDataAdapter1.InsertCommand = New OleDbCommand("INSERT INTO Table1 ([Login], [Password]) values (?, ?)", thisConnection)
это параметры подстановки, первый вопрос - для Login, второй - для Password.

OleDbDataAdapter1.InsertCommand.Parameters.Add("@Login", OleDbType.VarChar, 255, logtextBox.Text)
добавили параметр для первого вопроса

OleDbDataAdapter1.InsertCommand.Parameters.Add("@Password", OleDbType.VarChar, 255, "123")
добавили параметр для второго вопроса.

В SQL Server это реализовано более понятней, можно нормальные имена вместо вопросов указывать.
 
Ответ # 9 # · +  +  дата добавления: 26.07.2011 / 16:58
Автор ответа:
Mister_W
Mister_W
тем: 0 / ответов: 4 / благодарностей: 0 / репутация: 2
ответов: 4
создал(а) тем: 0


          thisAdapter.InsertCommand = new OleDbCommand("INSERT INTO Users ([User], [Password]) VALUES (?,?)", thisConnection);
          thisAdapter.InsertCommand.Parameters.Add("@User", OleDbType.VarChar, 50, textBoxUser.Text);
          thisAdapter.InsertCommand.Parameters.Add("@Password", OleDbType.VarChar, 50, textBoxPass.Text);
Добавляется такой код, дальше я использовал старый способ измения и тот, что опубликован в ответе 2.
В первом случае :
Необработанное исключение типа "System.NullReferenceException" произошло в DataForm.exe

Дополнительные сведения: В экземпляре объекта не задана ссылка на объект.
Во втором:
Параметр ?_1 не может быть задан по дефолту
 
Ответ # 10 # · +  +  дата добавления: 26.07.2011 / 17:08
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Необработанное исключение типа "System.NullReferenceException" произошло в DataForm.exe
В режиме отладки обычно указывается строка, в которой происходит исключение.
System.NullReferenceException - что-то не объявлено.
тот, что опубликован в ответе 2
Во втором ответе код неверный, иначе не было бы третьего ответа :)
Параметр ?_1 не может быть задан по дефолту
Возможно так:
thisAdapter.InsertCommand.Parameters.Add("@User", OleDbType.VarChar).Value = textBoxUser.Text; 
thisAdapter.InsertCommand.Parameters.Add("@Password", OleDbType.VarChar).Value = textBoxPass.Text;
 
Ответ # 11 # · +x2 +  дата добавления: 26.07.2011 / 19:03
Автор ответа:
Mister_W
Mister_W
тем: 0 / ответов: 4 / благодарностей: 0 / репутация: 2
ответов: 4
создал(а) тем: 0


Помогло, спасибо вам огромное за помощь)
 
Страница: 1 + Создать новую тему