SqlDataAdapter获胜';t更新记录

本文关键字:更新 新记录 获胜 SqlDataAdapter | 更新日期: 2023-09-27 18:20:06

我有以下代码,并且没有将记录更新到数据库。

 SqlDataAdapter da = new SqlDataAdapter("spInvent",cs);
 da.UpdateCommand.CommandType = System.Data.CommandType.StoredProcedure;
 da.UpdateCommand.Parameters.AddWithValue("@DisplayNo", displayNo);
 da.UpdateCommand.Parameters.AddWithValue("@Q", Q);
 da.UpdateCommand.ExecuteNonQuery();
 DataSet ds = new DataSet();
 da.Fill(ds);
 gvInfo.DataSource = ds;
 gvInfo.DataBind();

我在这里得到错误:

da.UpdateCommand.CommandType = System.Data.CommandType.StoredProcedure;

SqlDataAdapter获胜';t更新记录

正确的语法是:

using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;
SqlConnection cs = new
SqlConnection(ConfigurationManager.ConnectionStrings["myConnection"].ConnectionString);
if (cs.State == ConnectionState.Closed) {
    cs.Open();
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = cs;
cmd.CommandText = "UpdateStoredProcedureName";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@DisplayNo", displayNo);
cmd.Parameters.AddWithValue("@Q", Q);
int result = cmd.ExecuteNonQuery();
if (result > 0) {
    //Your Database is updated. To show it in gridview, you have
    //to select the table and show its data.
    SqlCommand cmd1 = new SqlCommand();
    cmd1.Connection = cs;
    cmd1.CommandText = "SelectStoredProcedureName";
    cmd1.CommandType = CommandType.StoredProcedure;
    cmd1.Parameters.AddWithValue("@displayId", 0);
    //In the SelectStoredProcedure, use @displayId = 0 to 
    //show all rows.
    SqlDataAdapter adpt = new SqlDataAdapter();
    adpt.SelectCommand = cmd1;
    DataSet ds = new DataSet();
    adpt.Fill(ds);
    cs.Close();
    GridViewID.DataSource = ds;
    GridViewId.DataBind();
} else {
    cs.Close();
}

这里有几件事:

  1. 您没有指定实际的UpdateCommandSqlDataAdapter的构造函数设置SelectCommand。您需要指定用于更新数据的存储过程
  2. 您不需要直接执行SelectCommandUpdateCommand-当您使用它来填充DataSet或在其上调用Update()时,DataAdapter将自动执行此操作(GridView可能会为您执行此操作,具体取决于您如何连接它)

我认为你的问题是,你不应该执行查询,然后填充你的数据集,你可以只填充数据集,所以:

SqlDataAdapter da = new SqlDataAdapter();
//updated to explicitly create update command object
SqlCommand update = new SqlCommand("spInvent",cs);
update.CommandType = System.Data.CommandType.StoredProcedure;
update.Parameters.AddWithValue("@DisplayNo", displayNo);
update.Parameters.AddWithValue("@Q", Q);
da.UpdateCommand = update;
//don't need this line:
//da.UpdateCommand.ExecuteNonQuery();
DataSet ds = new DataSet();
da.Fill(ds);
gvInfo.DataSource = ds;
gvInfo.DataBind();