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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2013, 23:40   #1
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию работа с бд в С шарп

Здравствуйте. есть форма, в ней 2 текстбокса и кнопка. при нажатии на кнопку в бд должны записаться значения этих полей. как это реализовать?
Код:
....
OleDbCommand comm =new OleDbCommand("insert into пользователи(пользователь, пароль) values(значения из текстбокс1, значения из текстбокс2)",conn);
.....
alex(21) вне форума Ответить с цитированием
Старый 12.11.2013, 00:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Читаем тут:
http://support.microsoft.com/kb/306636/ru
http://msdn.microsoft.com/ru-ru/libr...vs.110%29.aspx
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2013, 12:22   #3
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

изменил следующим образом:
Код:
OleDbCommand cmd = conn.CreateCommand();
                cmd.CommandText = "insert into Пользователи(Пользователь, Пароль) 
values('" + textBox1.Text + "','" + textBox2.Text + "')";
                cmd.ExecuteNonQuery();
ошибок не выдает. теперь вопрос вот в чем, данные в БД не добавляются.
расскажу немного что должна делать программа. в БД есть таблица Пользователи, она состоит из столбцов логин и пароль. после нажатия кнопки "Регистрация" на форме данные из текстбоксов должны записаться в эту таблицу. с этим кодом вроде все нормально. в текстбоксы ввожу только что добавленные логин и пароль. работает. но после того как я закрываю выполнение программы и запускаю его снова то с новыми данными программа не работает. Открыл БД, но оказывается данные не добавились. где я допустил ошибку?
alex(21) вне форума Ответить с цитированием
Старый 12.11.2013, 14:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
данные в БД не добавляются.
Может потому что ты не вызываешь метод типа Commit?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2013, 16:34   #5
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

я не очень хорошо знаком с этим материалом. попробовал использовать Commit, но не получилось. может я не правильно что то сделал. у меня не получается. БД Access 2007. поправьте пожалуйста код если не сложно:
Код:
private void button1_Click(object sender, EventArgs e)
        {
            string DBconnect = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB.accdb;Persist Security Info=True";
            OleDbConnection conn = new OleDbConnection(DBconnect);
            OleDbCommand cmd = new OleDbCommand();
            OleDbTransaction transaction = null;
            cmd.Connection = conn;
            conn.Open();
                OleDbCommand comm2 = new OleDbCommand("SELECT * FROM Пользователи", conn);
                OleDbDataReader readr2 = comm2.ExecuteReader();
                int i = 0;
                int k = 0;
                while (readr2.Read())
                {
                    polzovatel[i] = readr2["Пользователь"].ToString();
                    parol[i] = readr2["Пароль"].ToString();
                    if (textBox1.Text == polzovatel[i] && textBox2.Text == parol[i])
                        k = 1;
                    i++;
                }
                if (k == 1)
                {
                    MessageBox.Show("Такой пользователь уже существует!");
                    readr2.Close();
                }
                else
                {
                    transaction = conn.BeginTransaction();
                    cmd.Connection = conn;
                    cmd.Transaction = transaction;
                    cmd.Transaction = transaction;
                    cmd.CommandText = "insert into Пользователи(Пользователь, Пароль) values('" + textBox1.Text + "','" + textBox2.Text + "')";
                    cmd.ExecuteNonQuery();
                    transaction.Commit();
                }
                conn.Close();
alex(21) вне форума Ответить с цитированием
Старый 12.11.2013, 19:07   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
cmd.Transaction = transaction;
Задублировал )

ExecuteNonQuery должен возвращать число выполненных (успешно) операций в рамках транзакции , так что поставь проверку. и если ExecuteNonQuery<>1 ьей тревогу - запрос твой отработал неверно, может потому что сам он не верен в чем-то.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2013, 20:20   #7
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

С таким кодом данные в БД добавляются, но когда я в visual studio нажимаю перестроить решение, то из БД добавленные данные удаляются. запрос по моему правильный, проверял в самом Access 2007.
То есть вы хотите сказать что если ExecuteNonQuery=1 то должно работать правильно?
alex(21) вне форума Ответить с цитированием
Старый 12.11.2013, 21:03   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
когда я в visual studio нажимаю перестроить решение, то из БД добавленные данные удаляются
Не понял? О_о Как ребуилд влияет на БД?
Цитата:
если ExecuteNonQuery=1 то должно работать правильно?
Нет. Я хотел сказать только то что сказал: Этот метод возвращает кол-во успешно выполненных запросов. У тебя он один, логично и проверять на единицу или на >0
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2013, 15:02   #9
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

Stilet, спасибо большое. выручили. я там еще немного с подключением БД накосячил сейчас все работает.
появился еще один вопрос. в БД есть таблица, в которую добавлено n элементов. на форму нужно вывести так же n элементов label. с подсчетом элементов понятно, а вот как добавить элементы label и что бы они располагались друг под другом
alex(21) вне форума Ответить с цитированием
Старый 13.11.2013, 15:45   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как добавить элементы label и что бы они располагались друг под другом
Не советую. Для таких штук лучше брать Grid. Что там есть? dataGrid кажись? Его и используй для построения данных цугом.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си шарп ilyagovsa Помощь студентам 4 04.08.2013 19:01
Матрица Си шарп N_P_A C# (си шарп) 0 29.04.2013 00:38
c шарп dinobot C# (си шарп) 3 01.02.2013 11:49
Работа со строками в с шарп. Alex_sim Общие вопросы .NET 13 23.04.2010 22:46
две задачи на СИ шарп логарифм Общие вопросы C/C++ 4 12.06.2009 14:48