web-dev-qa-db-ja.com

dateTimePickerを使用してSQLデータベースの日付列に日付を挿入する方法は?

SQLデータベースにタイプDateの生年月日列があります

そして私のアプリケーションでは、dateTimePickerを使用して生年月日を取得します

しかし、dateから取得したdateTimePickerを挿入しようとすると、次のようになります。

エラーが発生します:

'12'付近の構文が正しくありません

そして、コードをデバッグしようとすると、dateTimePickerから取得した値は次のようになります。

日付= {3/21/2015 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();
2
Jad Chahine

本当にすべきことはパラメータを使用してSQLインジェクション攻撃を回避することです-そしてそれはまたあなたを文字列フォーマットの日付から解放します-これも良いことです!

_//cmd is sql command
cmd.CommandText = "INSERT INTO dbo.Person(birthdate) VALUES(@Birthdate);";

cmd.Parameters.Add("@Birthdate", SqlDbType.Date).Value = dateTimePicker.Value.Date;

//con is sql connection
con.Open();
cmd.ExecuteNonQuery();
con.Close();
_

また、適切な廃棄を確実にするために、SqlConnectionSqlCommand、およびSqlDataReaderusing(....) { .... }ブロックに配置することをお勧めします。

_string connectionString = ".......";
string query = "INSERT INTO dbo.Person(birthdate) VALUES(@Birthdate);";

using (SqlConnection con = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(query, conn))
{
     cmd.Parameters.Add("@Birthdate", SqlDbType.Date).Value = dateTimePicker.Value.Date;

     con.Open();
     cmd.ExecuteNonQuery();
     con.Close();
} 
_
9
marc_s

前述のように、ベストプラクティスはパラメーターを使用することですが、ソースからのTSQLステートメントを本当に使用する必要がある場合は、次の形式の日付を使用する必要があります:yyyymmdd

cmd.CommandText="INSERT INTO person (birthdate) VALUES('"+dateTimePicker.Value.Date.ToString("yyyyMMdd")+"')";
2
DMVC

これを文字列形式として試してください。

cmd.CommandText="INSERT INTO person(birthdate)VALUES('"+dateTimePicker.Value.Date+"')";
0
Developer

dateTimePickerは値を1/1/1900 12:00:00 AMとして格納するため、DATETIMEの形式がYYYY-MM-DD HH:MI:SSであるため、格納する場合はDATETIMEを使用する必要があります。

dateTimePicker値を使用して印刷できます

MessageBox.Show(dateTimePicker.Value.ToString());

自分の目で確かめてください。

0

引用符を含めてみてください:

cmd.CommandText="INSERT INTO person (birthdate) VALUES('"+dateTimePicker.Value.Date+"')";

パラメータも使用することをお勧めします。

0
Brian Mains