首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于数据更新解决办法

2012-02-28 
关于数据更新各位大虾,我有以下语句update.SQL.Add( insertintoaaa_lld(lldno,hbdno,ddate,cdepcode,prono

关于数据更新
各位大虾,我有以下语句
    update.SQL.Add( 'insert   into   aaa_lld(lldno,hbdno,ddate,cdepcode,prono,cmemo,hander)   values( '+
                                  ' ' ' '+main_ado.fieldbyname( 'lldno ').AsString+ ' ' ' '+ ', '+
                                  ' ' ' '+main_ado.fieldbyname( 'hbdno ').AsString+ ' ' ' '+ ', '+
                                  ' ' ' '+main_ado.fieldbyname( 'ddate ').AsString+ ' ' ' '+ ', '+
                                  ' ' ' '+main_ado.fieldbyname( 'cdepcode ').AsString+ ' ' ' '+ ', '+
                                  ' ' ' '+main_ado.fieldbyname( 'prono ').AsString+ ' ' ' '+ ', '+
                                  ' ' ' '+main_ado.fieldbyname( 'cmemo ').AsString+ ' ' ' '+ ', '+
                                  ' ' ' '+mainunit.username+ ' ' ' '+ ') ');
由于main_ado.fieldbyname( 'prono ').AsString= 'FCDD0706005 ', 'FCDD0706021 '
不能更新
跟总sql语句如下
insert   into   aaa_lld(lldno,hbdno,ddate,cdepcode,prono,cmemo,hander)   values( '001 ', '001 ', '2007-06-30   12:26:29 ', '06 ', ' 'FCDD0706005 ', 'FCDD0706021 ' ', ' ', 'ADMIN ')
我该怎么改呀


[解决办法]
用 "可以吗
update.SQL.Add( 'insert into aaa_lld(lldno,hbdno,ddate,cdepcode,prono,cmemo,hander) values( '+
' ' ' '+main_ado.fieldbyname( 'lldno ').AsString+ ' ' ' '+ ', '+
' ' ' '+main_ado.fieldbyname( 'hbdno ').AsString+ ' ' ' '+ ', '+
' ' ' '+main_ado.fieldbyname( 'ddate ').AsString+ ' ' ' '+ ', '+
' ' ' '+main_ado.fieldbyname( 'cdepcode ').AsString+ ' ' ' '+ ', " '+
main_ado.fieldbyname( 'prono ').AsString+ ' ", '+
' ' ' '+main_ado.fieldbyname( 'cmemo ').AsString+ ' ' ' '+ ', '+
' ' ' '+mainunit.username+ ' ' ' '+ ') ');

[解决办法]
' ' '+main_ado.fieldbyname( 'lldno ').AsString+ ' ' ', '+
' ' '+main_ado.fieldbyname( 'hbdno ').AsString+ ' ' ', '+
' ' '+main_ado.fieldbyname( 'ddate ').AsString+ ' ' ', '+
' ' '+main_ado.fieldbyname( 'cdepcode ').AsString+ ' ' ', '+
' ' '+main_ado.fieldbyname( 'prono ').AsString+ ' ' ', '+


' ' '+main_ado.fieldbyname( 'cmemo ').AsString+ ' ' ', '+
' ' '+mainunit.username+ ' ' ') ');
[解决办法]
或者这样写比较好看
update.SQL.Add( 'insert into aaa_lld(lldno,hbdno,ddate,cdepcode,prono,cmemo,hander) ');
update.SQL.Add( 'values(:lldno,:hbdno,:ddate,:cdepcode,:prono,:cmemo,:hander) ');
update.Parameters.ParamByName( 'lldno ').Value:=main_ado.fieldbyname( 'lldno ').AsString;
...
update.Parameters.ParamByName( 'lldno ').Value:=mainunit.username;
showmessage(update.SQL.text);//查看一下是否一一对应。
update.execsql;
[解决办法]
你需要对你的main_ado.fieldbyname( 'prono ').AsString里的字符串里的单引号进行转意才可以,写个函数将prono里的单引号转成两个引号
[解决办法]
' ' ' '+StringReplace( main_ado.fieldbyname( 'prono ').AsString, ' ' ' ', ' ' ' ' ' ',[rfReplaceAll])+ ' ' ' '+ ', '+
[解决办法]
不能不用字符呀  '是可以用#39来显示的,那样不就清楚多了。
[解决办法]
顶上去
[解决办法]
注入式攻击也是利用这个方式来攻击的.最好用参数方式提交:
以下例子
var
ExecResult: integer;
NewGID: integer;
begin
try
CheckData(Group);

with sAdoq do begin
Parameters.Clear;
Parameters.CreateParameter( 'UserID ',ftString,pdInput,Len,FUserID);
Parameters.CreateParameter( 'gGroupID ',ftInteger,pdInput,4,NewGID);
Parameters.CreateParameter( 'gTitle ',ftString,pdInput,gTitleLen,Group.Title);
Parameters.CreateParameter( 'gLastChangeCount ',ftInteger,pdInput,4,Group.LastChangeCount);

SQL.Text := 'insert into t (UserID,GroupID,Title,LastChangeCount) '
+ ' values (:UserID,:gGroupID,:gTitle,:gLastChangeCount) ';

ExecResult := ExecSQL;
end;
Result := arrFinish;
except
Result := arrDataBaseFailed;
end;


这样不管值包括什么非法字符都没有问题,还能阻止注入式攻击
[解决办法]
( '001 ', '001 ', '2007-06-30 12:26:29 ', '06 ', ' 'FCDD0706005 ', 'FCDD0706021 ' ', ' ', 'ADMIN ')
其中的 ' 'FCDD0706005 ', 'FCDD0706021 ' '为什么有两个撇号??
是不是这里的问题.
[解决办法]
晕,把半角的逗号转成全角的逗号就可以了!

热点排行