Member 14743579 Ответов: 2

Я пытаюсь вставить дату рождения в базу данных


я пытаюсь вставить данные из даты рождения txtbox в базу данных но он показывает ошибку не удается преобразовать varchar в datetime

Что я уже пробовал:

код кнопки регистрации
protected void Register_Click(object sender, EventArgs e)
{
btnSave_Click(dob.Text);
}


функция btnsave_click код
public void btnSave_Click(string dob)
{
   cmd.Parameters.Add(DataAccess.CreateParameter(cmd, "DateofBirth", DbType.String, dob));
}


и в моей базе данных я объявил dob как тип данных datetime.
вышеуказанные коды являются только основными кодами

2 Ответов

Рейтинг:
20

OriginalGriff

Не используйте текст для передачи даты в БД: он зависит от пользователя и БД, разделяющих общую культуру, иначе дата может быть неправильно истолкована. Например, 01-02-03 1 февраля 2003 года (Европа), 2 января 2003 года (США) или 3 февраля 2001 года (ISO / Japan)?
Либо используйте элемент управления Calendar, который непосредственно предоставляет значение DateTime, либо используйте DatTime.Попробуйте проверить и преобразовать пользовательский ввод в DateTime, а затем передать значение DateTime в БД непосредственно через ваш параметр. Помните, что пользователи совершают ошибки при вводе что-нибудь и очень важно убедиться, что только допустимые входные данные попадают в вашу БД.


Рейтинг:
2

Maciej Los

Внутри метода btnSave_Click нужно:
1. Откройте Объект sqlconnection[^]
2. Создание Команда sqlcommand[^]
3. Добавление параметров[^] к команде
4. Метод executenonquery[^]

Как уже писал OriginalGriff, вам нужно использовать правильный тип данных: DateTime, вместо текста (string).

public void btnSave_Click(DateTime dob)
{
	int retVal = 0;
	using(SqlConnection connection = new SqlConnection("connection_string_here"))
	{
		connection.Open();
		using(SqlCommand cmd = new SqlCommand("command_text_here", connection))
		{
			cmd.Parameters.Add(DataAccess.CreateParameter(cmd, "DateofBirth", DbType.DateTime, dob));
			retVal = cmd.ExecuteNonQuery();
		}
 	}
	if(retVal>0)
	{
		//success
	}
	else
	{
		//error!
	}
}


phil.o

DbType.DateTime было бы более подходящим, не так ли?

Maciej Los

Спасибо, что обратили на это внимание. Ошибка копирования-вставки ;)

Member 14743579

я тоже этим пользовался.