INSERT INTO 语句的语法错误,直接通过ACCESS可以顺利执行SQL语句,但是通过ExecuteNonQuery()执行却其实语法错误,我搞了2个钟头了,实在没辙,帮帮忙!

屯屯屯 2009-04-16 02:16:30
NSERT INTO 语句的语法错误,直接通过ACCESS可以顺利执行SQL语句,但是通过ExecuteNonQuery()执行却其实语法错误,我搞了2个钟头了,实在没辙,帮帮忙!

public static void log_xieru(string text,string feifa,string ip,string user)
{
string time = System.DateTime.Now.ToString();
OleDbConnection myconn = DB.CreateDB();
myconn.Open();
string sqlstr = "INSERT INTO log_user(timeok,textok,feifa,ip,user) VALUES('" + time + "','" + text + "','" + feifa + "','" + ip + "','" + user + "')";
OleDbCommand cmd1 = new OleDbCommand(sqlstr, myconn);
cmd1.ExecuteNonQuery();
myconn.Close();
}

数据库中的字段全部为文本型的,调试sqlstr里面的内容是:INSERT INTO log_user(timeok,textok,feifa,ip,user) VALUES('2009-4-16 2:03:49','user= pas= time= ','用户使用非客户端访问','127.0.0.1',' ')

DB.log_xieru("user="+user+" pas="+pas+" time="+time,"用户使用非客户端访问",Request.ServerVariables["REMOTE_ADDR"].ToString(),user);这个是调用方法,请知道的帮帮我,谢谢了。
...全文
1862 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjjzxh 2009-12-29
  • 打赏
  • 举报
回复
问题已解决,password是ACCESS的保留字,在作为字段时要以[Password]的形式使用..谢谢大家啦
keyuming 2009-04-16
  • 打赏
  • 举报
回复
user是ACCESS的系统保留字,改成下面这样试下(在user上加[]):
string sqlstr = "INSERT INTO log_user(timeok,textok,feifa,ip,[user]) VALUES('" + time + "','" + text + "','" + feifa + "','" + ip + "','" + user + "')"; 


参考网页:
http://hi.baidu.com/pk_sk/blog/item/284d92d70f7d7cdaa144dfb8.html sql语句中[]中括号的用途及注意事项(汇总)
http://www.5iya.com/blog/post/16.asp Access保留字&变量名列表
hndth 2009-04-16
  • 打赏
  • 举报
回复
帮顶
xybcz 2009-04-16
  • 打赏
  • 举报
回复
用parameter
阿非 2009-04-16
  • 打赏
  • 举报
回复

string sqlstr = @"INSERT INTO log_user(timeok,textok,feifa,ip,user) VALUES('" + time + "','" + text + "','" + feifa + "','" + ip + "','" + user + "')";

chowyi 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 coodd 的回复:]
尽量不要拼sql语句,用parameter形式代替,消除注入漏洞代码更易读易维护。
Insert into ... values(@time,@text,...)这样
然后用cmd1.parameters.add方法添加各个参数值
[/Quote]
注入 值得关注
屯屯屯 2009-04-16
  • 打赏
  • 举报
回复
谢谢大家了,问题已经解决,导致SQL语句不能执行是使用了保留字 user 作为字段名称,如果使用保留字做字段需要加上 [user] ,这样才能正常。
同时 我已经参考

尽量不要拼sql语句,用parameter形式代替,消除注入漏洞代码更易读易维护。
Insert into ... values(@time,@text,...)这样
然后用cmd1.parameters.add方法添加各个参数值


的意见,使用parameter形式代替了拼SQL语句的方式,谢谢大家了,呵呵!
keyuming 2009-04-16
  • 打赏
  • 举报
回复
提供各思路:先用tyr{}catch{}捕获一下异常, 看看能不能解决
coodd 2009-04-16
  • 打赏
  • 举报
回复
尽量不要拼sql语句,用parameter形式代替,消除注入漏洞代码更易读易维护。
Insert into ... values(@time,@text,...)这样
然后用cmd1.parameters.add方法添加各个参数值
快40的码农 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hndth 的回复:]
帮顶
[/Quote]
正解
feiman111 2009-04-16
  • 打赏
  • 举报
回复
帮顶 谢谢 学习了
cppfaq 2009-04-16
  • 打赏
  • 举报
回复
[user]
孤帆远影_q 2009-04-16
  • 打赏
  • 举报
回复
把 Request.ServerVariables["REMOTE_ADDR"].ToString()拎出来,单独作个变量。

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧