a1mimo Ответов: 4

Как вставить дату в столбец даты sql db с помощью dateTimePicker?


Всем Привет,

Моя проблема проста у меня есть столбец даты рождения типа date в моей базе данных sql и в моем приложении я использую dateTimePicker, чтобы получить дату рождения, но при попытке вставить дату, которую я получил из dateTimePicker, я получаю ошибку Неправильный синтаксис рядом с "12"

И когда я пытаюсь отладить код, я обнаруживаю, что значение, которое я получаю от dateTimePicker, равно Date = {7/16/2011 12:00:00 AM}

код:
//cmd is sql command
cmd.CommandText="INSERT INTO person (birthdate) VALUES("+dateTimePicker.Value.Date+")";
//con is sql connection
con.Open();
cmd.ExecuteNonQuery();
con.Close();



Заранее спасибо
:-)

4 Ответов

Рейтинг:
31

Gordon Beeming (RSA)

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

cmd.CommandText = "INSERT INTO person (birthdate) VALUES(@date)";
            cmd.Parameters.Add(new SqlParameter("@date", dateTimePicker.Value.Date));
            //con is sql connection
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();



Помощь С Параметрами
http://g4ac.co.za/WFU4g[^]


Рейтинг:
2

m@dhu

Поскольку тип данных для используемой даты является только Date и ваше значение datepicker возвращается Time вместе с датой.
Либо измените тип данных на datetime и или передать только значение даты для вставки.


a1mimo

Спасибо мкгуд
Я просто решил эту проблему прямо сейчас и, честно говоря, думал, что все будет так, как вы сказали, но это было потому, что я забыл поставить значение даты между "Вот так".CommandText="вставить в person (birthdate) значения('"+dateTimePicker.Ценность.Дата+"')";
но все же есть кое-что, что я хотел бы знать, как получить только значение даты из dateTimePicker, если dateTimePicker.Ценность.Дата не получает только дату?

m@dhu

Как вы сказали в своем вопросе, он возвращается "7/16/2011 12:00:00 AM", поэтому я пришел к выводу, что он также возвращает время.

a1mimo

да я знаю и кстати мой голос 4

Рейтинг:
1

Danny Hulmston

Я бы хотел решить эту проблему, изменив тип данных в SQL DB на VARCHAR(50)

и выполните следующий SQL-запрос в своем коде.

con.Open();

cmd.CommandText = "INSERT INTO dbo.Person (birthdate) VALUES ('" + this.dateTimePicker.Text + "')";
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();


Это будет отображать значение по состоянию на 16 июля 2011 года в вашей базе данных SQL без значения времени. Затем это можно преобразовать в короткую строку даты, используя следующее
string dateString = this.dateTimePicker1.Text;
DateTime Date = Convert.ToDateTime(dateString.ToString());


Затем вы можете вывести дату в короткий формат даты, используя следующее;

MessageBox.Show(Date.ToShortDateString());


Надеюсь, это поможет.

РЕДАКТИРОВАТЬ
-------------------------------------------------------
Используйте параметры Sql, чтобы избежать SQL-инъекция[^].

Введите нулевые значения для столбца DateTime SQL Server[^](Объясняет, как передавать значения с помощью параметров sql.)


a1mimo

Спасибо Дэнни
Я уже обнаружил проблему это была одинарная цитата Я не ставил ее вокруг значения даты но ваши решения будут работать так же хорошо так что мой голос 4

Рейтинг:
1

Member 10028082

Воспользуйся
Элемента управления datetimepicker.ценность.в строку("ДД/ММ/гггг")
По твоему выражению лица.