我在构建sqldataadapter之后尝试运行更新语句。我在我的表中有一个名为INIT_PHASE的列,如果INIT_PHASE为null或没有数据,那么我想将其设置为1.我已经尝试过,但我似乎无法正确更新语句。 PLS。救命。这是我的代码:
string ID = ddlPractice.SelectedValue;
string TYPE = DDL_TYPE.SelectedValue;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnection"].ConnectionString);
SqlDataAdapter da = new SqlDataAdapter(@"select SET_SK, UNIT_NM, TYPE, INIT_PHASE FROM myTable WHERE UNIT_NM =@ID AND TYPE = @TYPE", con);
DataTable dtSETS = new DataTable();
da.SelectCommand.Parameters.AddWithValue("@ID", (ID));
da.SelectCommand.Parameters.AddWithValue("@TYPE", (TYPE));
da.Fill(dtSETS);
if (dtSETS.Rows.Count > 0)
{
DataRow dtSETS_row = dtSETS.Rows[0];
long SET_SK = dtSETS_row.Field<long>("SET_SK");
if (dtSETS_row.Field<string>("INIT_PHASE") == null)
{
//run update command here
update myTable set INIT_PHASE = 1;
}
}
答案 0 :(得分:3)
这里的一种方法是使用SqlCommandBuilder
来构建UPDATE
语句:
string ID = ddlPractice.SelectedValue;
string TYPE = DDL_TYPE.SelectedValue;
SqlConnection con = new SqlConnection(
ConfigurationManager.ConnectionStrings["myConnection"].ConnectionString);
SqlDataAdapter da = new SqlDataAdapter(
@"select SET_SK, UNIT_NM, TYPE, INIT_PHASE FROM myTable WHERE UNIT_NM =@ID AND TYPE = @TYPE",
con);
DataTable dtSETS = new DataTable();
da.SelectCommand.Parameters.AddWithValue("@ID", (ID));
da.SelectCommand.Parameters.AddWithValue("@TYPE", (TYPE));
da.Fill(dtSETS);
SqlCommandBuilder builder = new SqlCommandBuilder(da);
da.UpdateCommand = builder.GetUpdateCommand();
if (dtSETS.Rows.Count > 0)
{
DataRow dtSETS_row = dtSETS.Rows[0];
long SET_SK = dtSETS_row.Field<long>("SET_SK");
if (dtSETS_row.Field<string>("INIT_PHASE") == null)
{
dtSETS_row["INIT_PHASE"] = 1;
}
}
da.Update(dtSETS);
请注意以下几行代码。这里我们正在构建更新命令:
SqlCommandBuilder builder = new SqlCommandBuilder(da);
da.UpdateCommand = builder.GetUpdateCommand();
此处我们正在修改DataRow
,以便将RowState
更改为Modified
:
dtSETS_row["INIT_PHASE"] = 1;
然后最后,在这里,我们使用Update
上的SqlDataAdapter
方法向数据库发送更新:
da.Update(dtSETS);
这样做只会发送RowState
Modified
行的更新。
注意:每个ADO.NET对象都应该包含在using
中。重构您的代码以匹配此类型的模板:
using (SqlConnection con = new SqlConnection(...))
{
using (SqlDataAdapter da = new SqlDataAdapter(...))
{
}
}
答案 1 :(得分:1)
如果我理解正确,您可以直接执行命令来更新此字段
if (dtSETS_row.Field<string>("INIT_PHASE") == null)
{
SqlCommand cmd = new SqlCommand(@"UPDATE myTable set INIT_PHASE = 1 " +
"WHERE UNIT_NM =@ID AND TYPE = @TYPE", con);
cmd.Parameters.AddWithValue("@ID", (ID));
cmd.Parameters.AddWithValue("@TYPE", (TYPE));
cmd.ExecuteNonQuery();
}
您需要为SqlDataAdapter和以下命令打开连接
答案 2 :(得分:0)
您必须使用SqlCommandBuilder
类来更新断开连接模式下的数据。 ie)数据集和数据适配器。