Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在SQLDataAdapter中使用Update语句_C#_Asp.net_Sqldataadapter - Fatal编程技术网

C# 如何在SQLDataAdapter中使用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

我试图在构建sqldataadapter后运行update语句。我的表中有一个名为INIT_PHASE的列,如果INIT_PHASE为null或没有数据,那么我希望将其设置为1。我已经试过了,但我似乎无法通过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);

    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();
}