 |
|
Conversion failed when converting date and/or time from character string |
|
 |
|
|
 |
 |
|
คือ ผมทำ window service ทำ Acess Control เก็บข้อมูลใน Database พอรัน ใน mode debug ก็ใช้งานได้ปกติ แต่ ลง เป็น service จริงๆแล้วกลับมาปัญญหา log ไม่เข้า database ผมจึง ลอง ทำ Text file debug แล้ว จึงรู้ว่า มันมีปัญหาตรงที่ ส่ง parameter ไป strore procedure ที่ประเภท DateTime ,Time, แล้วได้ Error ตามนี้
Code
System.Data.SqlClient.SqlException: Conversion failed when converting date and/or time from character string.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at XStationService.TcpProcessor.Run()
ซึ่งที่หาข้อมูลในเน็ต พบว่า อาจจะเป็นที่ region ของเครื่อง แต่ผมยังไม่เข้าใจว่าต้อง ตั้งค่ายังไง หรือว่าผมมาผิดทาง
ส่วนนี้คือcode ส่วนที่มีปัญหาคับ
using (SqlCommand empCommand = new SqlCommand("dbo.Pkinouttran_insert_member", dbConnection))
{
empCommand.CommandType = CommandType.StoredProcedure;
empCommand.Parameters.Add("@inouttran_id", SqlDbType.NVarChar).Value = inouttran_id; this.WriteToFile("1");
empCommand.Parameters.Add("@scr_no", SqlDbType.NVarChar).Value = (long)data[12 + i * 70 + 44] * 256 * 256 * 256 + (long)data[12 + i * 70 + 45] * 256 * 256 + (long)data[12 + i * 70 + 46] * 256 + (long)data[12 + i * 70 + 47]; this.WriteToFile("2");
int srcNo = data[12 + i * 70 + 44] * 256 * 256 * 256 + data[12 + i * 70 + 45] * 256 * 256 + data[12 + i * 70 + 46] * 256 + data[12 + i * 70 + 47];
empCommand.Parameters.Add("@cscmain_id", SqlDbType.NVarChar).Value = getPkcard.Get_CscMain_ID(srcNo); this.WriteToFile("3");
empCommand.Parameters.Add("@rabbit_id", SqlDbType.NVarChar).Value = getPkcard.Get_Rabbit_ID(srcNo); this.WriteToFile("4");
empCommand.Parameters.Add("@loc_id", SqlDbType.Int).Value = "1"; this.WriteToFile("5");
empCommand.Parameters.Add("@equip_id", SqlDbType.Int).Value = data[12 + i * 70 + 48]; this.WriteToFile("6");
dateIN = new DateTime(2000 + data[12 + i * 70 + 9], data[12 + i * 70 + 8], data[12 + i * 70 + 7], data[12 + i * 70 + 6], data[12 + i * 70 + 5], data[12 + i * 70 + 4]);
DateTime nn = DateTime.Now;
this.WriteToFile("NOW :" + nn );
this.WriteToFile("dateIN :" + dateIN);
empCommand.Parameters.Add("@indate", SqlDbType.DateTime).Value = dateIN; this.WriteToFile("7");
try
{
empCommand.ExecuteNonQuery(); this.WriteToFile("18");
}
catch (SqlException ex) // This will catch all SQL exceptions
{
this.WriteToFile(("Execute exception issue: " + ex));
}
ยังไงช่วยบอกแนวทางด้วยนะคับ ต้องตั้งค่าหรือ โค้ดต้องเป็นทิศทางไหน(ป.ล. ความจริงส่ง Parameter ไปมากกว่านี้แต่คิดว่าน่าจะเป็นที่ ตัวแปร DateIN ช่วยทีครับ)
Tag : .NET, Ms SQL Server 2008, Ms SQL Server 2012, C#, VS 2012 (.NET 4.x), Windows
|
ประวัติการแก้ไข 2017-03-03 09:21:39 2017-03-03 09:22:06
|
 |
 |
 |
 |
Date :
2017-03-03 09:20:46 |
By :
bankzaclub |
View :
2539 |
Reply :
6 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือไม่รู้ว่าทำได้หรือยังครับ
เลี่ยงไปใช้ varchar ได้ครับ แต่ไม่ใช่ที่ table แต่เป็นที่ strore procedure
กำหนดค่า input @indate เป็น varchar
จากนั้นก็ ส่งไปเป็นแบบนี้แทน
Code (C#)
using System.Globalization;
/*
....
*/
DateTimeFormatInfo enDTFI = new CultureInfo("en-US", false).DateTimeFormat;
empCommand.Parameters.Add("@indate", SqlDbType.NVarChar).Value = dateIN.Value.Date.ToString("yyyy-MM-dd hh:mm:ss tt",enDTFI);
มั้ง
|
 |
 |
 |
 |
Date :
2017-03-03 11:38:58 |
By :
บัญดิษฐ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|