尝试更新数据库中的值时出错

时间:2013-04-12 13:04:14

标签: c# database sql-update insert-update

我有以下c#/查询:

TrackDuration =TimeSpan.Parse( Request.Form["TrackDuration"].ToString());
string InsertQuery = string.Format("UPDATE tblTracks SET  TrackLength={0}, TrackDuration='{1}', TrackName='{2}',TrackDescription='{3}',TrackMap='{4}',DifficultLevel={5},OverallHeight={6},IsCircular='{7}', ForBeginners='{8}',StartPoint='{9}',ParkingPlace='{10}',SeasonOfYear={11},TrackLocation={12}, Images='{13}' WHERE UserID={14}",
                                                                      TrackLength, TrackDuration, TrackName, TrackDescription, TrackMap, DifficultID, OverallHeight, IsCircular, ForBeginners, StartPoint, ParkingPlace, SeasonID, AreaID, ImageList, UserID);

但我收到此错误消息:

  

UPDATE语句中的语法错误

     

查询表达式中的语法错误(缺少运算符)

我真的试图解决这个问题,但我不能。

如何解决此问题?

更新:

这是查询的值:

UPDATE tblTracks SET  TrackLength=35, TrackDuration='02:30:00', TrackName='45',TrackDescription='<p>sometext.</p>
',TrackMap='f',DifficultLevel=3,OverallHeight=450,IsCircular='true', ForBeginners='false',StartPoint='<p>קיבוץיסעור </p>
',ParkingPlace='<p>כניסה לקיבוץ יסעור</p>
',SeasonOfYear=1,TrackLocation=3, Images='' WHERE UserID=1

sql值类型是:

TrackLength = number ; TrackDuration = date/time ; TrackName= string ;TrackDescription= string; TrackMap = string; DifficultLevel=number;OverallHeight=number;IsCircular=true/false;ForBeginners=true/false;
StartPoint=string; ParkingPlace=string; SeasonOfYear=number; TrackLocation=number;Images=string

1 个答案:

答案 0 :(得分:2)

&#39; 02:30:00&#39;对于 datetime 数据库字段AFAIK而言,它不是正确的值。默认格式由date format setting控制。

此外,&#39; 20130412&#39;应该适用于任何情况,但适用于datetime字段。您需要正确格式化TrackDuration或使用CAST/CONVERT。由于TimeSpan不包含日期部分(它表示持续时间而非时间点),因此您只能弥补(例如前置&#34; 20100101&#34;)但这很糟糕破解。

正确的解决方案是使用正确的DB字段类型。

&#39; 02:30:00&#39;如果字段为time类型,则可能有效。请阅读有关time types in SQL Server的更多信息。

更好的是,为什么不在几秒钟内使用普通整数?持续时间不是日期。

更大的问题是你连接字符串来设置命令文本,这会打开你的SQL注入攻击。如果我将赛道命名为a';DROP TABLE tblTracks;--,那么您的数据库就是吐司:

UPDATE tblTracks SET TrackLength=35, 
                     TrackDuration='02:30:00', 
                     TrackName='a';DROP TABLE tblTracks;-- ...