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;
正确的语法是:
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();
}
这里有几件事:
- 您没有指定实际的
UpdateCommand
。SqlDataAdapter
的构造函数设置SelectCommand
。您需要指定用于更新数据的存储过程 - 您不需要直接执行
SelectCommand
或UpdateCommand
-当您使用它来填充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();