用的是access数据库
用的oledb
更新就的是这个
this.oleDbUpdateCommand1.CommandText = "UPDATE fkey SET fname = @fname WHERE (fid = @Original_fid)";
this.oleDbUpdateCommand1.Connection = this.oleDbConnection1;
this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("fcheck", System.Data.OleDb.OleDbType.VarWChar, 50, "fcheck"));
this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("fid", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, false, ((System.Byte)(10)), ((System.Byte)(0)), "fid", System.Data.DataRowVersion.Current, null));
this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("fname", System.Data.OleDb.OleDbType.VarWChar, 50, "fname"));
this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_fcheck", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "fcheck", System.Data.DataRowVersion.Original, null));
this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_fcheck1", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "fcheck", System.Data.DataRowVersion.Original, null));
this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_fname", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "fname", System.Data.DataRowVersion.Original, null));
this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_fname1", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "fname", System.Data.DataRowVersion.Original, null));
this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("@Original_fid", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, false, ((System.Byte)(10)), ((System.Byte)(0)), "fid", System.Data.DataRowVersion.Original, null));
this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("@fname", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, true, ((System.Byte)(0)), ((System.Byte)(0)), "fname", System.Data.DataRowVersion.Default,null));private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
this.oleDbDataAdapter1.UpdateCommand.Parameters["@Original_fid"].Value = (int)this.DataGrid1.DataKeys[e.Item.ItemIndex];
this.oleDbDataAdapter1.UpdateCommand.Parameters["@fname"].Value = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
this.oleDbDataAdapter1.UpdateCommand.Connection.Open();
this.oleDbDataAdapter1.UpdateCommand.ExecuteNonQuery();
this.oleDbDataAdapter1.UpdateCommand.Connection.Close();
this.DataGrid1.EditItemIndex = -1;
this.BindGrid();
}
是不是这个this.oleDbUpdateCommand1.Parameters.Add(………………);
这个里面的问题啊?

解决方案 »

  1.   

    如果 CommandType 设置为 Text,OLE DB .NET 提供程序不支持将参数传递给 OleDbCommand 调用的 SQL 语句或存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。例如:SELECT * FROM Customers WHERE CustomerID = ?因此,向 OleDbParameterCollection 添加 OleDbParameter 对象的顺序必须直接对应于该参数的问号占位符在命令文本中的位置。注意   如果集合中的参数不匹配要执行的查询的要求,则可能会导致错误。
      

  2.   

    sqlchen(哈欠),这位兄弟,好象这个我看了,但是不明白什么意思。
      

  3.   

    就是说如果你使用System.Data.OleDb,并且使用CommandType为Text类型(非存储过程)的SQL来进行查询,那么就不能使用类似@fname的参数。例如这一句:
    this.oleDbUpdateCommand1.CommandText = "UPDATE fkey SET fname = @fname WHERE (fid = @Original_fid)";就要改成:
    this.oleDbUpdateCommand1.CommandText = "UPDATE fkey SET fname = ? WHERE (fid = ?)";即在SQL语句中使用?来实现,并且添加 参数对象的顺序必须直接对应于该参数的问号占位符在SQL文本中的位置。