本帖最后由 omhhw 于 2009-09-09 01:22:26 编辑

解决方案 »

  1.   

    看看。row[]的索引时从0开始的。
      

  2.   

    表有没有建主键?
    看看生成后的 OleDbDataAdapter 的 InsertCommand 语句正不正确。
      

  3.   

    OleDbConnection有没有修改权限?
      

  4.   

    先把你的文本框的值.手工写个insert在SQL中执行一下,看看是不是有问题.
      

  5.   

    有主键,NewRow[0]就是ID,自动增长值。
    如何看生成后的 OleDbDataAdapter 的 InsertCommand 语句字串?
      

  6.   

    Debug.WriteLine(comBuilder.GetInsertCommand().CommandText);后
    显示
    INSERT INTO Menu (Name, Cat, Price, Date) VALUES (?, ?, ?, ?)为什么自动生成的语句是这个?值为什么没有添加进去?
      

  7.   

     MessageBox.Show(NewRow[1].tostring()+ ","+ NewRow[2].tostring() + "," + NewRow[3].tostring()+","+NewRow[4].tostring()); 
      

  8.   

    MessageBox.Show(NewRow[1]+ ","+ NewRow[2] + "," + NewRow[3]+","+NewRow[4]);这语句也工作正常。但还是没有解决为什么执行插入时提示系统自动生成的Insert语句语法有问题?
      

  9.   

    使用的是Access,数据表Menu 结构为  ID  主键 自动增长,Name 文本,Cat 文本,Price 数字,Date 日期
      

  10.   

    在错误提示后添加下面那么一句,用来显示你自动生成的插入语句到底是什么,估计那个自动产生的插入语句有问题,建议自己改写它,那个属性是可以修改的。                try 
                    {            
                            
                        da.Update(ds); 
                        conn.Close(); 
                    } 
                    catch (Exception ex) 
                    { 
                        conn.Close(); 
                        MessageBox.Show(ex.Message); 
                        MessageBox.Show(da.InsertCommand.CommandText); //查看你自动生成的插入语句是否正确。
                    } 
      

  11.   

     NewRow[3] = DateTime.Today.ToString("d");修改成这样,还是故障依然。这么简单的数据表,怎么会出这样的问题,真是想不通了……
      

  12.   

    添加你说的语句后显示该句“未将对象引用设置到对象的实例。”修改成如下手动添加语句还是显示同样错误
    C# code
    OleDbCommand cmd = new OleDbCommand();
                    cmd.CommandText = "Insert into Caidan (Name,Cat,Price,Date) Values ('" + textBoxAddName.Text.Trim() + "','" + comboBoxAddCat.Text.Trim() + "','" + Convert.ToInt16(textBoxAddPrice.Text.Trim()) + "','" + DateTime.Now + "')";
                    cmd.Connection = conn;
    conn.Open();
                        cmd.ExecuteNonQuery();
      

  13.   

    如果出现“未将对象引用设置到对象的实例”的错误,说明你就没有生成那个InsertCommand,没有创建InsertCommand的话,更新自然是出错的。
    手动添加的语句出错,问题可能在日期型的传入上面,如果你参数化了,就不用考虑格式,但是你如果作为字符串传递给更新语句,就需要考虑日期格式了。
      

  14.   

    我把数据表除了主键外全部改成文本类型,依然显示insert语句语法错误。
      

  15.   


    请教那应该如何创建呢?                OleDbDataAdapter da = new OleDbDataAdapter("select * from Menu", conn);
                    OleDbCommandBuilder comBuilder = new OleDbCommandBuilder(da);                DataSet ds = new DataSet();                 da.Fill(ds);
    这样不行吗?
      

  16.   

    还有你说“除了主键外全部改成文本类型,依然显示insert语句语法错误”,是不是因为没有屏蔽了之前的那个da.Update(ds);语句造成的啊。
    ----------------------
    手动创建da.InsertCommand啊,比如:
    da.InsertCommand = new OleDbCommand(); 
    da.InsertCommand.CommandText = "Insert into Caidan (Name,Cat,Price,Date) Values (?,?,?,?)"; 
    da.InsertCommand.Connection = conn; 
    da.InsertCommand.Parameters.Add(
            "Name", OleDbType.VarChar, 20, "Name");
    da.InsertCommand.Parameters.Add(
            "Cat", OleDbType.VarChar, 20, "Cat");
    da.InsertCommand.Parameters.Add(
            "Price", OleDbType.Decimal, 0, "Price");
    da.InsertCommand.Parameters.Add(
            "Date", OleDbType.Date, 0, "Date");
      

  17.   

    找到问题了,是因为我在数据表设计时,把存放日期的那一列命名为"Date"了,估计是和系统保留字冲突了,改名字后插入正常了,谢谢啊大家!