0
我發現CDate
函數在下面的代碼奇怪的行爲:CDate有什麼奇怪的行爲?
private void button1_Click(object sender, EventArgs e)
{
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=" + Application.StartupPath + @"\db.mdb" + ";Persist Security Info=False");
{
OleDbDataAdapter adapterA = new OleDbDataAdapter("SELECT CDate(#01/05/2013#) AS TheDate", connection);
DataTable dataTableA = new DataTable();
adapterA.Fill(dataTableA);
DateTime dateTimeA = (DateTime)dataTableA.Rows[0]["TheDate"]; // get 1
MessageBox.Show(dateTimeA.Month.ToString());
} //these to ensure that I did not use the variables in the next block /^-^\ .
{
OleDbDataAdapter adapterB = new OleDbDataAdapter("SELECT CDate(#13/05/2013#) AS TheDate", connection);
DataTable dataTableB = new DataTable();
adapterB.Fill(dataTableB);
DateTime dateTimeB = (DateTime)dataTableB.Rows[0]["TheDate"]; // get 5
MessageBox.Show(dateTimeB.Month.ToString());
}
}
我明白,如果該值大於12越大,CDate
功能將它視爲日期的「日」部分,另一部分將被視爲日期的'月'部分。
源代碼可以從(Link)下載。
這是什麼規則?
爲什麼微軟沒有在MSDN中解釋這一點?
也許這只是VB.NET和那個SQL之間的一個奇怪的巧合,但不要'#'分隔日期文字?所以'CDate'與它無關;日期文字會自動更改格式。 「無論什麼都有效」:P – Ryan
如果您需要CDate,請同意@minitech,使用字符串。此外,年,月,日可以節省語言環境問題。 – Fionnuala