原来做的没有错误。现在自己在写一下,怎么就错了。错误原因 就是“INSERT INTO 语句的语法错误”看半天也没有看出来
源码这样的
 private void AddUser()
        {
             conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\user.mdb;Jet OLEDB:Database Password = woailihuajun";
            conn.Open();
              string insert = "Insert  into  QQandPassword(id,num,password,addtime) values (@id,@QQ,@qqPassword,@datatime) ";          
              OleDbCommand  comm=new OleDbCommand (insert,conn );
              comm.Parameters.Add((new OleDbParameter("@id", OleDbType.Integer)));
              comm.Parameters.Add((new OleDbParameter("@QQ",OleDbType.BSTR  )));
              comm.Parameters.Add((new OleDbParameter("@qqPassword", OleDbType.BSTR)));
              comm.Parameters.Add((new OleDbParameter("@datatime", OleDbType.DBTimeStamp )));
              comm.Parameters["@QQ"].Value = 1;
              comm.Parameters["@QQ"].Value = textBox2.Text;
              comm.Parameters["@qqPassword"].Value = textBox3.Text;
              comm.Parameters["@datatime"].Value = DateTime.Now;
              if (comm.ExecuteNonQuery()>0) // 这里语法错误 “INSERT INTO 语句的语法错误”               {
                  MessageBox.Show("添加成功");
              } 
              conn.Close();  
        }

解决方案 »

  1.   


    这句是什么意思?你查询可以得到所要结果?
    还是sql的问题,好好检查一下,看看是否对关键字进行了转义,将关键字使用“[”和“]”括起来;
    看看是否是引号用错。
      

  2.   

    老问题了,加方括号Insert into [QQandPassword]([id],[num],[password],[addtime])
      

  3.   

    我观察了下。。SQL语句里怎么能这样加参数呢写存储过程里是这样加参数的啊。SQL语句只要拼接进去就可以了啊
      

  4.   

    调试下,得到sql语句在看看是神马东东....
      

  5.   

    参考方法向ACCESS中的"时间/日期"字段中插入DateTime.Now时出现“标准表达式中数据类型不匹配。”错误的解决办法http://dotnet.aspx.cc/article/27c0d578-e4df-44dc-91a7-54ba10a53d1f/read.aspx
      

  6.   

    另外,
    id一般是自动增加字段类型,无需写在SQL语句里面最好
    "Insert into QQandPassword([num],[password],[addtime]) values (@QQ,@qqPassword,@datatime) "; 
      

  7.   

    可是以前我不写方括号 ,全都可以,哦不对有一次是和关键字冲突,PassWord用了中括号,其余都没有。能告诉一下为什么要加中括号。
      

  8.   

    还有就是查询时候, string select = "select  * from QQandPassword where num  like  '%" + textBox1.Text.Trim() + "%' ";
    我要模糊查询,后面的一个“%“为什么不能省略,不省略老是达不到效果。
      

  9.   

    应该是可以的,你的num字段是字符类型的吗
      

  10.   

    呵呵 小弟也是初学者,确实在SQL理没这么写过一直就是在存储过程里写的。。见笑了。。
    每天逛下还是有些收获呀。呵呵
      

  11.   

    匹配不是什么问题了,
    关键是comm.Parameters.Add((new OleDbParameter("@datatime", OleDbType.DBDate)));
    comm.Parameters["@datatime"].Value = DateTime.Now;
     添加进去的是日期,没有时间我要的是精确到秒的。 
       可是用comm.Parameters.Add((new OleDbParameter("@datatime", OleDbType.DBTimeStamp)));出现 标准表达式中数据类型不匹配
    上面有人给出了“标准表达式中数据类型不匹配
    ”那样的也不符合我的,还是有错。 
      

  12.   

    comm.Parameters.Add((new OleDbParameter("@datatime", OleDbType.DBDate)));
    comm.Parameters["@datatime"].Value = DateTime.Now;
    怎么样让在dataGridView1显示时候带有日期和时间的。
      

  13.   

    OleDbType.DBDate就带秒啊。你试试了没?我发的文章都是带秒的 http://dotnet.aspx.cc/
      

  14.   


    格式化啊
    {0:yyyy-MM-dd}
      

  15.   

    我的dataGridView1直接绑定的是ds 
      

  16.   

    我记得网页是代秒的,可现在是winform
      

  17.   

    一个简单又好玩的问题,程序没错,是字段名不能定义为 password,换个字段名就可以了。这是Access的问题
      

  18.   

    不错啊 也可能是是winform错吧
      

  19.   

    SQL拼接的话,让人知道,注入一下代码,你的数据库就全部完蛋了。
    这样用参数,可以提高安全性。
      

  20.   

    ACCESS好像有关键字冲突这回事,我以前搞过一个程序也是这样,ACCESS表里面的字段名好像都不可以为password这些关键字。不过,应该也不是这个问题。
    下面这段代码我习惯写成这样
      comm.Parameters.Add((new OleDbParameter("@id", OleDbType.Integer)));
      comm.Parameters.Add((new OleDbParameter("@QQ",OleDbType.BSTR )));
      comm.Parameters.Add((new OleDbParameter("@qqPassword", OleDbType.BSTR)));
      comm.Parameters.Add((new OleDbParameter("@datatime", OleDbType.DBTimeStamp )));
      comm.Parameters["@QQ"].Value = 1;//这里楼主应该把ID号搞成QQ参数值了,改改看。
      comm.Parameters["@QQ"].Value = textBox2.Text;
      comm.Parameters["@qqPassword"].Value = textBox3.Text;
      comm.Parameters["@datatime"].Value = DateTime.Now;这样也看看  comm.Parameters.Add((new OleDbParameter("@id", "1")));
      comm.Parameters.Add((new OleDbParameter("@QQ",textBox2.Text.ToString())));
      comm.Parameters.Add((new OleDbParameter("@qqPassword", textBox3.Text.ToString())));
      comm.Parameters.Add((new OleDbParameter("@datatime", DateTime.Now.ToString())));
    如果还不行,应该就是参数格式问题了,不过一般对于ACCESS来说,我都是直接使用字符串,没有定义其他类型,因为其他类型使用比较麻烦。
      

  21.   

    我的意思是直接把那段代码缩短,不另外传值。把传参数那段覆盖,把  comm.Parameters["@QQ"].Value = 1;
      comm.Parameters["@QQ"].Value = textBox2.Text;
      comm.Parameters["@qqPassword"].Value = textBox3.Text;
      comm.Parameters["@datatime"].Value = DateTime.Now;这段删除掉。