错误十进制

问题描述:

我的web服务代码错误十进制

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class Service : System.Web.Services.WebService 
{ 
    SqlConnection con = new SqlConnection(
     "Server=NOVA-PC;database=totev006;User ID=***;Password =***;"); 

    public Service() { } 

    [WebMethod(Description = "Update return in Bet")] 
    public string setReturn(int EventID) 
    { 
     string sql = ""; 
     decimal dcm = (decimal)100.5 + (decimal)45.055; 
     int BetTypeWinID = 1; 
     int BettorID = 1; 
     int ins = 0; 

     con.Open(); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = con; 

     sql = "update bet"; 
     sql += " set [return] = " + dcm; 
     sql += " where event_id = " + EventID; 
     sql += " and bet_type_id = " + BetTypeWinID; 
     sql += " and bettor_id = " + BettorID; 

     cmd.CommandText = sql; 
     ins += cmd.ExecuteNonQuery(); 
     con.Close(); 
     if (ins > 0) 
      return "Ok"; 
     else 
      return "not Ok"; 
    } 
} 

我得到的例外,这是调用堆栈:

System.Data.SqlClient.SqlException: Incorrect syntax near '555'. 
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() 
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async) 
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) 
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 
at Service.setReturn(Int32 EventID) in e:\Learning\Webservice\demo\webservice\App_Code\Service.cs:line 49 

如何解决这一问题?

+1

它闻到小数点分隔符错误。尝试在您的SqlCommand中使用SqlParameter。 – tschmit007 2012-07-16 09:39:42

+0

'Console.WriteLine(sql)'请。 – leppie 2012-07-16 09:40:25

+0

@user [数据库中的返回]类型是十进制数? – 2012-07-16 09:43:01

您的系统可能使用的格式为123.45的区域设置为123,45。

在格式化中使用parameterized queries(参见SqlParameter)或be specific

无论你做什么,DO NOT "just" change the locale setting来“解决”这个问题。