如何使用 SQL 数据适配器更新命令更新数据 table 中的一行

How to use SQL Data Adapter Update command to update a row in data table

到目前为止,我设法使用 Insert 命令在名为 "Students"[=26= 的 table 中创建了一条新记录].这是我使用的代码:

        int ID = int.Parse( TextBox1.Text);
        string name = TextBox2.Text;
        string gender = TextBox3.Text;
        int marks = int.Parse(TextBox4.Text);



        string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

        using (SqlConnection con = new SqlConnection(CS))
        {
            //create data adapter 
            SqlDataAdapter adapter = new SqlDataAdapter("select * from students",con);

            //create sqlcommand to store execute stored procedure
            adapter.InsertCommand = new SqlCommand("spInsertStudent",con);
            adapter.InsertCommand.CommandType = CommandType.StoredProcedure;

            //create parameter for Return value (@ROWCOUNT)
            SqlParameter parameter = adapter.InsertCommand.Parameters.Add("@ROWCOUNT",SqlDbType.Int);
            parameter.Direction = ParameterDirection.ReturnValue;

            adapter.InsertCommand.Parameters.Add("@ID", SqlDbType.Int, 0, "ID");
            adapter.InsertCommand.Parameters.Add("@Name",SqlDbType.NVarChar,50,"Name");
            adapter.InsertCommand.Parameters.Add("@Gender",SqlDbType.NVarChar,10,"Gender");
            adapter.InsertCommand.Parameters.Add("@TotalMarks",SqlDbType.Int,0,"TotalMarks");

            DataSet ds = new DataSet();
            //DataTable students = new DataTable();
            adapter.Fill(ds,"Students");

            DataTable students = ds.Tables["Students"];

            DataRow studentRow = students.NewRow();
            studentRow["ID"] = ID;
            studentRow["Name"] = name;
            studentRow["Gender"] = gender;
            studentRow["TotalMarks"] = marks;
            students.Rows.Add(studentRow);


            adapter.Update(ds,"Students");

现在我想编辑一个数据行。如果 ID 与 ID 参数匹配,则数据将被更改。这是我正在使用的存储过程:

create procedure updateStudent 
@ID int,
@Name varchar(50),
@Gender varchar(10),
@TotalMarks int

AS
BEGIN
    update Students set Name = @Name, Gender = @Gender, TotalMarks = @TotalMarks
    where ID = @ID
END

这是我在后面的代码中使用的 C# 代码:

        int ID = int.Parse(TextBox1.Text);
        string name = TextBox2.Text;
        string gender = TextBox3.Text;
        int marks = int.Parse(TextBox4.Text);

        string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlDataAdapter adapter = new SqlDataAdapter("Select * from Students",con);
            DataTable dtStudents = new DataTable();
            adapter.Fill(dtStudents);
            SqlCommand cmd = new SqlCommand("updateStudent",con);
            cmd.Parameters.Add("@ID", SqlDbType.Int, 0, "ID").Value = ID;
            cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name").Value = name;
            cmd.Parameters.Add("@Gender", SqlDbType.NVarChar, 10, "Gender").Value = gender;
            cmd.Parameters.Add("@TotalMarks", SqlDbType.Int, 0, "TotalMarks").Value = marks;
            adapter.UpdateCommand = cmd;

            adapter.Update(dtStudents);
        }

但是在我点击网络表单上的“更新”按钮后,没有任何错误消息,而且我的数据库中的数据也没有更新。我做错了什么?

我认为您应该编写 classes 来执行存储过程。它将更容易阅读和处理。 RunQuery 方法在这样一个 class like DB

 private SqlConnection Connection;
 public bool Open()
 {
    try
    {
       ConnectionString = "your connection string";
       Connection = new SqlConnection(ConnectionString);
       Connection.Open();
       return true;
     }
     catch (Exception ex)
     {
        errorMessage = ex.Message;
        return false;
     }
 }
 public bool RunQuery(string ProcedureName, SqlParameter[] Parameters)
 {
     bool res = false;
     try
     {
         SqlCommand Command = new SqlCommand();
         Command.CommandText = ProcedureName;
         Command.CommandType = CommandType.StoredProcedure;
         Command.Connection = Connection;
         Command.Parameters.AddRange(Parameters);
         Command.ExecuteNonQuery();
         res = true;
      }
      catch (Exception ex)
      {
         throw ex;
      }
      return res;
  }

你可以称它为

SqlParameter[] param= new SqlParameter[4];
param[0] = new SqlParameter("@ID", ID);
param[1] = new SqlParameter("@Name", name);
param[2] = new SqlParameter("@Gender", gender);
param[3] = new SqlParameter("@TotalMarks", marks);
RunQuery("updateStudent", param);