ds.Tables[0].Rows.Add(NewRow);提示Insert语句错误 本帖最后由 omhhw 于 2009-09-09 01:22:26 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看。row[]的索引时从0开始的。 表有没有建主键?看看生成后的 OleDbDataAdapter 的 InsertCommand 语句正不正确。 OleDbConnection有没有修改权限? 先把你的文本框的值.手工写个insert在SQL中执行一下,看看是不是有问题. 有主键,NewRow[0]就是ID,自动增长值。如何看生成后的 OleDbDataAdapter 的 InsertCommand 语句字串? Debug.WriteLine(comBuilder.GetInsertCommand().CommandText);后显示INSERT INTO Menu (Name, Cat, Price, Date) VALUES (?, ?, ?, ?)为什么自动生成的语句是这个?值为什么没有添加进去? MessageBox.Show(NewRow[1].tostring()+ ","+ NewRow[2].tostring() + "," + NewRow[3].tostring()+","+NewRow[4].tostring()); MessageBox.Show(NewRow[1]+ ","+ NewRow[2] + "," + NewRow[3]+","+NewRow[4]);这语句也工作正常。但还是没有解决为什么执行插入时提示系统自动生成的Insert语句语法有问题? 使用的是Access,数据表Menu 结构为 ID 主键 自动增长,Name 文本,Cat 文本,Price 数字,Date 日期 在错误提示后添加下面那么一句,用来显示你自动生成的插入语句到底是什么,估计那个自动产生的插入语句有问题,建议自己改写它,那个属性是可以修改的。 try { da.Update(ds); conn.Close(); } catch (Exception ex) { conn.Close(); MessageBox.Show(ex.Message); MessageBox.Show(da.InsertCommand.CommandText); //查看你自动生成的插入语句是否正确。 } NewRow[3] = DateTime.Today.ToString("d");修改成这样,还是故障依然。这么简单的数据表,怎么会出这样的问题,真是想不通了…… 添加你说的语句后显示该句“未将对象引用设置到对象的实例。”修改成如下手动添加语句还是显示同样错误C# codeOleDbCommand 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(); 如果出现“未将对象引用设置到对象的实例”的错误,说明你就没有生成那个InsertCommand,没有创建InsertCommand的话,更新自然是出错的。手动添加的语句出错,问题可能在日期型的传入上面,如果你参数化了,就不用考虑格式,但是你如果作为字符串传递给更新语句,就需要考虑日期格式了。 我把数据表除了主键外全部改成文本类型,依然显示insert语句语法错误。 请教那应该如何创建呢? OleDbDataAdapter da = new OleDbDataAdapter("select * from Menu", conn); OleDbCommandBuilder comBuilder = new OleDbCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds);这样不行吗? 还有你说“除了主键外全部改成文本类型,依然显示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"); 找到问题了,是因为我在数据表设计时,把存放日期的那一列命名为"Date"了,估计是和系统保留字冲突了,改名字后插入正常了,谢谢啊大家! 请问,XML的命名空间问题 GridView 控件的删除编辑问题 Entity FrameWork4问题 image数据类型的字段,在报表中如何让它正常显示出来................. 各位大师,我有个SQL语句方面的问题 在c#上传资源之后 在列表也用相应的offce格式打开 又多了个三角,散分! win8,8.1的任务管理器里的任务列表用的什么控件?或者说用的哪几个控件?怎么做到的? 新手求教:串口数据处理 编译下面的几行程序为什么会出现下面的错误?请指教,谢谢! 菜鸟继续提问。VS 2005快捷键!~~~~~~~~ 买视频会议系统
看看生成后的 OleDbDataAdapter 的 InsertCommand 语句正不正确。
如何看生成后的 OleDbDataAdapter 的 InsertCommand 语句字串?
显示
INSERT INTO Menu (Name, Cat, Price, Date) VALUES (?, ?, ?, ?)为什么自动生成的语句是这个?值为什么没有添加进去?
{
da.Update(ds);
conn.Close();
}
catch (Exception ex)
{
conn.Close();
MessageBox.Show(ex.Message);
MessageBox.Show(da.InsertCommand.CommandText); //查看你自动生成的插入语句是否正确。
}
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();
手动添加的语句出错,问题可能在日期型的传入上面,如果你参数化了,就不用考虑格式,但是你如果作为字符串传递给更新语句,就需要考虑日期格式了。
请教那应该如何创建呢? OleDbDataAdapter da = new OleDbDataAdapter("select * from Menu", conn);
OleDbCommandBuilder comBuilder = new OleDbCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(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");