SqlConnection conn;
DataSet ds;
SqlDataAdapter objAdapter;
SqlCommandBuilder objSqlCommandBuilder;
SqlParameter objSqlParameter;
DialogResult objDialogResult;
 private void btnUpdate_Click(object sender, EventArgs e)
        {
            string upCmd = "update Staff set StaffNanme = @StaffNanme where Credential = @Credential ";
            objAdapter.UpdateCommand = new SqlCommand(upCmd, conn); //初始化updateCommand
            //声明参数并制定数据库的列和版本
              objSqlParameter = objAdapter.UpdateCommand.Parameters.Add("@StaffNanme", SqlDbType.VarChar, 30);
            objSqlParameter.SourceColumn = "StaffNanme";
            objSqlParameter.SourceVersion = DataRowVersion.Current;            objSqlParameter = objAdapter.UpdateCommand.Parameters.Add("@Credential", SqlDbType.VarChar, 30);
            objSqlParameter.SourceColumn = "Credential";
            objSqlParameter.SourceVersion = DataRowVersion.Current;            
            try
            {
                //如果数据集已更改,则更新记录
                if (ds.HasChanges())
                {
                    //初始化DialogResult
                    objDialogResult = MessageBox.Show("您想要保存这些更改吗?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (objDialogResult == DialogResult.No)
                    {
                        return;
                    }
                    else
                    {
                        //DataAdapter的Update()方法将调用UpdateCommand
                        objAdapter.Update(ds, "Tab1");
                        MessageBox.Show("数据已更新");
                    }
                }
                else
                {
                    MessageBox.Show("未做任何修改");
                }
            }
            catch (SqlException ex)
            {
                //显示错误消息
                //MessageBox.Show(ex.Message);
            }
        }

解决方案 »

  1.   

    错误消息 :
    被准备语句'(@StaffNanme Varchar(30),@Credential Varchar(30)) update Staff se'需要参数@StaffName,但未提供参数
      

  2.   

    需要参数@StaffName,但未提供参数 
    -------------------------------
    说明你没有给这个参数赋值!
      

  3.   

    更新操作啊!objSqlParameter = objAdapter.UpdateCommand.Parameters.Add("@StaffNanme", SqlDbType.VarChar, 30); 
    objSqlParameter.SourceColumn = "StaffNanme"; 
    objSqlParameter.SourceVersion = DataRowVersion.Current;  //获取当前值  不用 value了吧。。
      

  4.   

    断点在这里出错的  objSqlParameter = objAdapter.UpdateCommand.Parameters.Add("@StaffNanme", SqlDbType.VarChar, 30);
    提示:未将对象引用设置到对象的实例
      

  5.   

    可以更新了 但我不理解为什么
    之前出错的时候:
    我在给DataGrid填充数据使用的SQL语句是    select  StaffNanme as 姓名,Credential as 证件号 from Staff我把语句改成 select elect StaffNanme ,Credential from Staff后面都没有改就可以更新了 
    难道 as 姓名后  就和StaffName对不上号了吗?
      

  6.   

    objSqlParameter.SourceColumn = "StaffNanme"; 
    可能就是这句的关系!
    要嘛换成
    objSqlParameter.SourceColumn = "姓名"; 
    估计和你说的一样的意思!呵呵,猜测!
      

  7.   

    你的想法对得 光改那里不行。。string upCmd = "update Staff set StaffNanme = @姓名 where Credential = @证件号 ";
    objAdapter.UpdateCommand = new SqlCommand(upCmd, conn); //初始化updateCommand
    objSqlParameter = objAdapter.UpdateCommand.Parameters.Add("@姓名", SqlDbType.VarChar, 30);    这里也要 改了 @姓名
                objSqlParameter.SourceColumn = "姓名";
                objSqlParameter.SourceVersion = DataRowVersion.Current;            objSqlParameter = objAdapter.UpdateCommand.Parameters.Add("@证件号", SqlDbType.VarChar, 30);
                objSqlParameter.SourceColumn = "证件号";
                objSqlParameter.SourceVersion = DataRowVersion.Current;哈哈~  谢谢 分给你了