Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление записей в таблицу 
:(
    Опции темы
Vitkaz
Дата 1.4.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



    Привет всем! Недавно начал изучать C#. Сейчас создаю базу данных, для чего проделал следующее: создал таблицы и связи между ними в SQL Server 2005, в Visual Studio 2008 установил соединение с сервером, создал форму, которая содержит Grid, textbox`ы и кнопку "Добавить клиента". Как добавить новую запись в таблицу я не знаю ? Помогите пожалуйста написать содержимое события button1_Click. 
PM MAIL   Вверх
Rififi
Дата 1.4.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: нет
Всего: 36



Vitkaz, 
есть несколько способов
в самом простом случае - создать объект Command и выполнить sql-запрос INSERT INTO

скачай/купи любую книгу с названием ADO.NET 2.0, например Professional ADO.NET 2, Pro ADO.NET 2.0 ..., или от папиков - Programming Microsoft® ADO.NET 2.0, причём многие из них имеются в переводном виде.
там всё это описано 
PM MAIL   Вверх
kuller
Дата 2.4.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



Цитата

Как добавить новую запись в таблицу я не знаю ? Помогите пожалуйста написать содержимое события button1_Click.  


Цитата

в самом простом случае - создать объект Command и выполнить sql-запрос INSERT INTO


Ну вот тебе пример добавления ЗАПИСИ в таблицу Список_блюд  в БД kafe.mdb:
(тут добавляемые данные вводятся в ТЕКСТБОКСЫ и также значения берутся с КОМБОБОКСОВ, по нажатию на кнопку происходит добавление данных)

Код
 
private void button1_Click(object sender, EventArgs e)
        {
            string s = textBox1.Text;
            string s1 = textBox3.Text;
            string s2 = textBox4.Text;
            if (s == "" || s1 == "" || s2 == "")
            {
                MessageBox.Show("Ошибка, не все поля заполнены", "Добавление блюда", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                OleDbConnection con = new OleDbConnection();
                con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + @"..\..\kafe.mdb";
                con.Open();
                OleDbCommand InsCom = new OleDbCommand("INSERT INTO Список_блюд VALUES (" + Convert.ToInt32(label2.Text) + ",'" + textBox1.Text + "','" + comboBox1.Text + "','" + textBox3.Text + "'," + Convert.ToSingle(textBox4.Text) + ")", con);
                if (InsCom.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Сведения успешно добавлены", "Добавление", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    con.Close();
                }
            }
        }

P.S. using System.Data.OleDb

Это сообщение отредактировал(а) kuller - 2.4.2009, 09:31
PM MAIL   Вверх
Vitkaz
  Дата 2.4.2009, 15:38 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



Изменил код, который дал kuller. Пробую пока ввести только ИНН. 
Код

private void button1_Click(object sender, EventArgs e)
        {
            string s = textBox1.Text;
            
            if (s == "")
            {
                MessageBox.Show("Ошибка, не все поля заполнены", "Добавление блюда", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                OleDbConnection con = new OleDbConnection();
                con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + @"D:\Bank\Database.mdf";
                con.Open();
                OleDbCommand InsCom = new OleDbCommand("INSERT INTO clients(InnCl) VALUES (" + textBox1.Text + ")", con);
                if (InsCom.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Сведения успешно добавлены", "Добавление", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    con.Close();
                }
            }
        }


При добавлениии ругается на строку con.Close(). Пишет следующее сообщение: System.Data.OleDb.OleDbException не обработано
  Message="Невозможно использовать ''; файл уже используется."
PM MAIL   Вверх
kuller
Дата 2.4.2009, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



Vitkaz, попробуйте заносить значения ни в 1 поле таблицы clients(InnCl), а во все и будьте внимательны с ТИПАМИ, из-за неправильного типа заносимых данных чаще всего и бывают ошибки!!!!
PM MAIL   Вверх
Vitkaz
Дата 2.4.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



Чтобы с преобразованиями типов не напутать, я создал таблицу всего с одним полем и попробовал добавить запись, но возникает та же ошибка.
PM MAIL   Вверх
kuller
Дата 2.4.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



Цитата

Чтобы с преобразованиями типов не напутать, я создал таблицу всего с одним полем и попробовал добавить запись, но возникает та же ошибка. 



Vitkaz, Ваше поле в которое Вы в данный момент пытаетесь добавить значение КАКОГО ТИПА????
PM MAIL   Вверх
Vitkaz
Дата 2.4.2009, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



Тип nchar(10). У меня были проблемы с соединением, но теперь соединение устанавливается, но записи добавить не получается.
Решил добавить запись, используя SqlCommand, но не знаю,  что писать после SqlCommand command = new SqlCommand(queryString, con);
Код

private void button1_Click(object sender, EventArgs e)
        {
            string s = textBox1.Text;

            if (s == "")
            {
                MessageBox.Show("Ошибка, не все поля заполнены", "Добавление блюда", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                SqlConnection con = new SqlConnection("Data Source=HP\\SQLEXPRESS;Initial Catalog=Database;Integrated Security=True");
               

                con.Open();
                if (con.State==ConnectionState.Open)
                {
                    MessageBox.Show("Соединение установлено", "Соединение", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    string queryString = "INSERT INTO Table(inn) VALUES (" + textBox1.Text + ")";
                    SqlCommand command = new SqlCommand(queryString, con);
                   /[color=red]/ ЧТО НАПИСАТЬ ДАЛЬШЕ НЕ ЗНАЮ.[/color]
                    con.Close();
                }
            }

        }


Это сообщение отредактировал(а) Vitkaz - 2.4.2009, 21:42
PM MAIL   Вверх
kuller
Дата 2.4.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



Vitkaz, если Вы вставляете ТЕКСТ, то дорлно быть так записано в SQL-запросе:
'" + textBox1.Text + "', т.е. кавычки ОДИНАРНЫЕ затем ДВОЙНЫЕ .
PM MAIL   Вверх
Vitkaz
Дата 2.4.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



Цитата(kuller @ 2.4.2009,  21:39)
Vitkaz, если Вы вставляете ТЕКСТ, то дорлно быть так записано в SQL-запросе:
'" + textBox1.Text + "', т.е. кавычки ОДИНАРНЫЕ затем ДВОЙНЫЕ .

Пробовал не помогает.

PM MAIL   Вверх
KelTron
Дата 3.4.2009, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 5
Всего: 38



Код

using (SqlConnection conn = new SqlConnection("Data Source=HP\\SQLEXPRESS;Initial Catalog=Database;Integrated Security=True"))
            {
                string queryString = "INSERT INTO Table(inn) VALUES (" + textBox1.Text + ")";

                SqlCommand command = new SqlCommand(queryString, conn);
                conn.Open();
                command.ExecuteNonQuery();
            }


Но лучше использовать параметизированные запросы:

Код

using (SqlConnection conn = new SqlConnection("Data Source=HP\\SQLEXPRESS;Initial Catalog=Database;Integrated Security=True"))
            {
                string queryString = "INSERT INTO Table(inn) VALUES (@inn)";

                SqlCommand command = new SqlCommand(queryString, conn);
                command.Parameters.AddWithValue("@inn", textBox1.Text);
                conn.Open();
                command.ExecuteNonQuery();
            }

                    
                   


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Vitkaz
Дата 3.4.2009, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



KelTron, спасибо за рекомендацию. После учебы попробую.



Это сообщение отредактировал(а) Vitkaz - 3.4.2009, 07:13
PM MAIL   Вверх
Vitkaz
Дата 3.4.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



Если пишу так,
Код

 using (SqlConnection conn = new SqlConnection("Data Source=HP\\SQLEXPRESS;Initial Catalog=Database;Integrated Security=True"))
                {
                    string queryString = "INSERT INTO Table(inn) VALUES (@inn)";

                    SqlCommand command = new SqlCommand(queryString, conn);
                    command.Parameters.AddWithValue("@inn", textBox1.Text);
                    conn.Open();
                    command.ExecuteNonQuery();
    
                 }

то ругается на строчку command.ExecuteNonQuery(); "Неправильный синтаксис около ключевого слова "Table"."

Ещё пробовал описать  CreateCommand(string queryString,string connectionString) в класее Program в Program.cs, не знаю как обратиться к CreateCommand с формы.
 
Код

private static void CreateCommand(string queryString,
            string connectionString)
        {
            using (SqlConnection connection = new SqlConnection(
                       connectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                command.Connection.Open();
                command.ExecuteNonQuery();
            }
        }


Это сообщение отредактировал(а) Vitkaz - 3.4.2009, 15:32
PM MAIL   Вверх
Idsa
Дата 3.4.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Vitkaz @  3.4.2009,  19:00 Найти цитируемый пост)
Неправильный синтаксис около ключевого слова "Table"

А у Вас точно есть таблицы Table? И если она даже есть, лучше взять ее в квадратные скобки:
Код

INSERT INTO [Table](inn) VALUES (@inn)

, ибо Table - это зарезервированное слово.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Vitkaz
Дата 3.4.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



 Спасибо, Idsa! Причина была в этом.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.