今天發現出現
Microsoft OLE DB Provider for SQL Server (0x80040E07)
從字串轉換為 datetime 時發生語法錯誤。
的錯誤。檢查程式,發現程式裡面擷取目前時間使用的是now(),用response.write輸出,發現字串裡有"上午"或"下午"出現,而SQL Server 的資料庫的datetime(8)類型不接受"上午""下午",也不能自動轉換,於是出錯(另外試了一下,在ACCESS資料庫裡是不會出現這種情況的)。
比如:insert into test (Time) values ('2010-04-03 下午 3:50:12') 在ACCESS裡會自動轉換成24小時制,得到數值為:"2010-04-03 15:50:12"。但是在SQL Server裡會出錯,提示"從字串轉換為 datetime 時發生語法錯誤。"那這應該就是時間格式設定問題了,上網查了一下,通過以下方法解決問題。
一、windows XP的解決方案(修改註冊表,我已經測試成功)
1、控制台--地區和語言選項--把時間設定為24小時格式。
2、建立 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/OLEAUT/VarConversionLocaleSetting= 2 (DWORD)
註:OLEAUT 項可能不存在。如果它不存在,則必須先建立該項。
3、重新啟動IIS。
問題解決。
原理是強制使asp時間使用地區格式。
二、windows 2003的解決方案(修改地區設定)
在控制台→地區設定→時間樣式和日期格式設定一下:
時間樣式設定為 HH:mm:ss
短日期格式設定為 yyyy-MM-dd
(win2003不需要修改註冊表,有人測試成功了)
三、通用解決方案(在程式裡修改)
可以使用replace 將 "上午" 二字或其他不想要的字元替換掉...
比如 <%=replace(now,"上午","")%>
或者直接替換掉所有的中文字元:Replace(now,"[/u4e00-/u9fa5]","")