C# 如何在SQLDataAdapter中使用Update语句
我试图在构建sqldataadapter后运行update语句。我的表中有一个名为INIT_PHASE的列,如果INIT_PHASE为null或没有数据,那么我希望将其设置为1。我已经试过了,但我似乎无法通过update语句使其正确。请。救命啊。这是我的密码:C# 如何在SQLDataAdapter中使用Update语句,c#,asp.net,sqldataadapter,C#,Asp.net,Sqldataadapter,我试图在构建sqldataadapter后运行update语句。我的表中有一个名为INIT_PHASE的列,如果INIT_PHASE为null或没有数据,那么我希望将其设置为1。我已经试过了,但我似乎无法通过update语句使其正确。请。救命啊。这是我的密码: string ID = ddlPractice.SelectedValue; string TYPE = DDL_TYPE.SelectedValue; SqlConnection con = new SqlConnec
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;
}
}
string ID=ddlpreace.SelectedValue;
字符串类型=DDL_TYPE.SelectedValue;
SqlConnection con=新的SqlConnection(ConfigurationManager.ConnectionString[“myConnection”].ConnectionString);
SqlDataAdapter da=new SqlDataAdapter(@“从myTable中选择SET_-SK、UNIT_-NM、TYPE、INIT_-PHASE,其中UNIT_-NM=@ID和TYPE=@TYPE”,con);
DataTable dtSETS=新DataTable();
da.SelectCommand.Parameters.AddWithValue(“@ID”,(ID));
da.SelectCommand.Parameters.AddWithValue(“@TYPE”,(TYPE));
da.填充(数据集);
如果(dtSETS.Rows.Count>0)
{
DataRow dtSETS_row=dtSETS.Rows[0];
long SET_SK=dtset_row.Field(“SET_SK”);
如果(dtSETS_行字段(“初始相位”)==null)
{
//在此处运行更新命令
更新myTable set INIT_PHASE=1;
}
}
这里的一种方法是使用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);
在这里,我们实际上是在修改数据行
,使其行状态
更改为已修改
:
dtSETS_row["INIT_PHASE"] = 1;
最后,我们使用SqlDataAdapter
上的Update
方法向数据库发送更新:
da.Update(dtSETS);
这将只发送RowState
为Modified
的行的更新
注意:应使用将每个ADO.NET对象包装在中。重构代码以匹配此类型的模板:
using (SqlConnection con = new SqlConnection(...))
{
using (SqlDataAdapter da = new SqlDataAdapter(...))
{
}
}
如果我理解正确,您可以直接执行一个命令来更新这个字段
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();
}
if(dtSETS\u行字段(“初始阶段”)==null)
{
SqlCommand cmd=new SqlCommand(@“UPDATE myTable set INIT_PHASE=1”+
“其中,单位=ID,类型=类型”,con);
cmd.Parameters.AddWithValue(“@ID”,(ID));
cmd.Parameters.AddWithValue(“@TYPE”,(TYPE));
cmd.ExecuteNonQuery();
}
您需要打开连接,但是对于SqlDataAdapter和以下命令,您必须使用SqlCommandBuilder
类在断开连接模式下更新数据。ie)数据集和数据适配器。谢谢,我遇到了这个错误:必须声明标量变量“@ID”,代码似乎在这一行失败:da.UpdateCommand=builder.GetUpdateCommand()@moe,您是否在使用SqlCommandBuilder
时遇到了一个特定的错误?是的,我遇到了这个错误:必须声明标量变量“@ID”,代码似乎在这一行失败:da.UpdateCommand=builder.GetUpdateCommand()@moe,将builder
行移动到Fill
下方,然后告诉我发生了什么。
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();
}