Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Добавление, обновление, удаление... записей


Автор: Redstuff 23.8.2007, 23:42
Как лучше добавлять, удалять, обновлять, редактировать записи в БД через textBox или DataGridView?
Например щас столкнулся с проблемой реализации этого на textBox'ах (все пытаюсь сделать на одной форме).
user posted image

М.б. стоит все-таки это делать в datagridview?

Приложение будет для 2х пользователей: админы и пользователи (только просмотр записей)

Автор: Idsa 24.8.2007, 06:02
Цитата(Redstuff @  23.8.2007,  23:42 Найти цитируемый пост)
М.б. стоит все-таки это делать в datagridview?

В том виде, в котором программа существует сейчас, DataGridView ей не нужен.

Цитата(Redstuff @  23.8.2007,  23:42 Найти цитируемый пост)
Как лучше добавлять, удалять, обновлять, редактировать записи в БД через textBox или DataGridView?

Цитата(Redstuff @  23.8.2007,  23:42 Найти цитируемый пост)
Приложение будет для 2х пользователей: админы и пользователи (только просмотр записей)

Пользователю сделать TextBox'ы ReadOnly, а кнопочки Редактировать, Обновить... Enabled=false. А админу все разрешить.
Насколько я понимаю, вероятность коллизии в твоем случае минимальна (т. к. редактировать будут редко - и только админ), то обновлять, удалять и вставлять можно по ID:
Код

UPDATE table Hardware SET ... WHERE ID=@ID

Аналогично INSERT и DELETE.

Автор: SpaceSpace 24.8.2007, 08:39
если невтерпеж использовать DataGridView, то в принципе, можно настроить вывод чего - угодно.
т.е. в строке таблицы ты можеш помещать контрол с текущим расположением тексбохов.

Но это очень муторно - создавать custom row/columns,
поэтому намного лучше оставить как есть

Автор: Redstuff 24.8.2007, 13:57
Последовал советам и оставил как есть.
Интерфейс при добавлении новой записи:
user posted image
Поля не все обязательны к заполнению, но если не заполнить поля не строковые то выдается ошибка:
Код

Не удалось преобразовать значение параметра из String в DateTime.

Код

private void btnOk_Click(object sender, EventArgs e)
        {
            SqlCommand cmd = new SqlCommand("INSERT INTO Hardware(Name, Date, Guarant, Price, Quentity, Information, ID_Type) VALUES(@Name, @Date, @Guarant, @Price, @Quentity, @Information, @ID_Type)", con);
            cmd.CommandType = CommandType.Text;

            cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 50);
            cmd.Parameters["@Name"].Direction = ParameterDirection.Input;
            cmd.Parameters["@Name"].Value = txtName.Text;

            cmd.Parameters.Add("@Date", SqlDbType.DateTime);
            cmd.Parameters["@Date"].Direction = ParameterDirection.Input;
            cmd.Parameters["@Date"].Value = txtDate.Text;

            cmd.Parameters.Add("@Guarant", SqlDbType.SmallDateTime);
            cmd.Parameters["@Guarant"].Direction = ParameterDirection.Input;
            cmd.Parameters["@Guarant"].Value = txtGuarant.Text;

            cmd.Parameters.Add("@Price", SqlDbType.Money);
            cmd.Parameters["@Price"].Direction = ParameterDirection.Input;
            cmd.Parameters["@Price"].Value = txtPrice.Text;

            cmd.Parameters.Add("@Quentity", SqlDbType.Int);
            cmd.Parameters["@Quentity"].Direction = ParameterDirection.Input;
            cmd.Parameters["@Quentity"].Value = txtQuantity.Text;

            cmd.Parameters.Add("@Information", SqlDbType.Text);
            cmd.Parameters["@Information"].Direction = ParameterDirection.Input;
            cmd.Parameters["@Information"].Value = txtInformation.Text;

            cmd.Parameters.Add("@ID_Type", SqlDbType.Int);
            cmd.Parameters["@ID_Type"].Direction = ParameterDirection.Input;
            cmd.Parameters["@ID_Type"].Value = combType.SelectedIndex + 1;

            //сохранить в базу
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }

Как этого можно избежать? Не проверкой же на то заполенно поле или нет и в зависимости от этого добавлять запись

Автор: Idsa 24.8.2007, 15:23
Какая строчка?

Автор: Redstuff 24.8.2007, 16:13
Всегда на 36 строку

Автор: Idsa 24.8.2007, 17:03
Цитата(Redstuff @  24.8.2007,  13:57 Найти цитируемый пост)
Поля не все обязательны к заполнению, но если не заполнить поля не строковые то выдается ошибка

Логично, что строковые параметры нормально воспринимают пустую строку. Параметр типа Date естественным образом затрудняется преобразовать пустую строку в дату, поэтому нужно воспользоваться, например, следующей конструкцией:
Код

      if (txtDate.Text == "")
        cmd.Parameters["@Date"].Value = DBNull.Value;
      else
        cmd.Parameters["@Date"].Value = txtDate.Text;


P. S. Если ты не мазохист, используй для ввода дат DateTimePicker.

Автор: Redstuff 24.8.2007, 17:14
Ясно, значит как я и написал выше ((
Цитата(Redstuff @ 24.8.2007,  13:57)

Как этого можно избежать? Не проверкой же на то заполенно поле или нет и в зависимости от этого добавлять запись


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)