Delphi更新SQL Server 2008 R2中的DateTime列

Pro*_*ind 3 delphi datetime sql-server-2008-r2

我试图将日期发布到SQL Server 2008 R2数据库中的dateTime列,但我遇到了许多问题,我不知道是什么原因.

首先,我使用此代码,但我收到错误:无法将字符串转换为日期.

ADOOF.SQL.Text:='UPDATE OFTab SET CA='''+ CA.Text + ''', demandeClient=''' + DateTimeToStr(demandeClient.DateTime) + ''' WHERE ID='''+ ADOOF.FieldByName('ID') + '''';
ADOOF.ExecSQL;
Run Code Online (Sandbox Code Playgroud)

其次,我使用了参数:

ADOOF.SQL.Text:='UPDATE OFTab SET CA='''+ CA.Text + ''', demandeClient=:demande_client WHERE ID='''+ ADOOF.FieldByName('ID') + '''';
ADOOF.Parameters.ParamByName('demande_client').Value:= demandeClient.Date;
ADOOF.ExecSQL;
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:找不到参数(demande_client).

我搜索了这个问题,我发现Embarcadero提出了一个建议,即在调用ADOQuery之前可以创建参数:

ADOOF.SQL.Text:='UPDATE OFTab SET CA='''+ CA.Text + ''', demandeClient=:demande_client WHERE ID='''+ ADOOF.FieldByName('ID') + '''';
ADOOF.Parameters.ParseSQL(ADOOF.SQL.Text, True);    
ADOOF.Parameters.ParamByName('demande_client').Value:= demandeClient.Date;
ADOOF.ExecSQL;
Run Code Online (Sandbox Code Playgroud)

我删除了连接Persist Security Info,但总是遇到同样的问题.请,任何建议.

信息:我正在使用MICROSOFT OLE DB Provider for SQL Server.

Pie*_*r B 5

在你的第一个例子中使用

FormatDateTime('YYYYMMDD hhmmss',demandeClient.DateTime)
Run Code Online (Sandbox Code Playgroud)

代替

DateTimeToStr(demandeClient.DateTime)
Run Code Online (Sandbox Code Playgroud)

这是因为没有formatsettings的DateTimeToStr使用您的本地化机器设置,而您的数据库可能或可能不喜欢该格式.使用FormatDateTime也消除了歧义:考虑到01/02/03,对于世界上的一些人来说,这是2003年1月2日,但对于其他人来说,2003年是februari,甚至有些人会说2001年,februari第3.YYYYMMDD是通用的.20030201始终是2003年2月的第1名.