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();
本当にすべきことはパラメータを使用して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();
_
また、適切な廃棄を確実にするために、SqlConnection
、SqlCommand
、およびSqlDataReader
をusing(....) { .... }
ブロックに配置することをお勧めします。
_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();
}
_
前述のように、ベストプラクティスはパラメーターを使用することですが、ソースからのTSQLステートメントを本当に使用する必要がある場合は、次の形式の日付を使用する必要があります:yyyymmdd
cmd.CommandText="INSERT INTO person (birthdate) VALUES('"+dateTimePicker.Value.Date.ToString("yyyyMMdd")+"')";
これを文字列形式として試してください。
cmd.CommandText="INSERT INTO person(birthdate)VALUES('"+dateTimePicker.Value.Date+"')";
dateTimePicker
は値を1/1/1900 12:00:00 AM
として格納するため、DATETIMEの形式がYYYY-MM-DD HH:MI:SS
であるため、格納する場合はDATETIME
を使用する必要があります。
dateTimePicker
値を使用して印刷できます
MessageBox.Show(dateTimePicker.Value.ToString());
自分の目で確かめてください。
引用符を含めてみてください:
cmd.CommandText="INSERT INTO person (birthdate) VALUES('"+dateTimePicker.Value.Date+"')";
パラメータも使用することをお勧めします。