从sqlcommand更新表记录

时间:2016-01-16 22:45:53

标签: c# asp.net sql-server sql-update

我有这种情况:在DataEntryForm中我有一个下拉列表,用户选择一个字母编号,并根据该插入其他相关数据。

我打算通过自动选择下拉列表来更改其他表格中的字母状态。

我正在使用此代码:

SqlParameter answertoparam = new SqlParameter("answerto", ansTo);

string commandText = "update IncomeLetters set IncomeLetters.docState_ID ='2' where income_number=('" + ansTo + "' )";

SqlCommand findincomelett = new SqlCommand(commandText, conn);
comm.Parameters.Add(answertoparam);
conn.Open();

findincomelett.ExecuteNonQuery();
comm.ExecuteNonQuery();

不幸的是,结果一无所获。

服务器没有给出错误,它只是刷新它的页面。

3 个答案:

答案 0 :(得分:1)

在您发布的代码中,您传递的是SqlParameter,并将值作为原始数据传递。做其中之一,最好将其作为SqlParameter传递,如

        SqlParameter answertoparam = new SqlParameter("answertoparam", ansTo);
        string commandText = "update IncomeLetters set IncomeLetters.docState_ID = '2' where income_number = @answertoparam";
        SqlCommand findincomelett = new SqlCommand(commandText, conn);
        findincomelett.Parameters.Add(answertoparam);
        conn.Open();
        findincomelett.ExecuteNonQuery();

此外,您有两个SqlCommand对象并在其上调用两个ExecuteNonQuery()。纠正...见下文

        SqlCommand findincomelett = new SqlCommand(commandText, conn); --1
        comm.Parameters.Add(answertoparam); --2

        conn.Open();

        findincomelett.ExecuteNonQuery(); --1
        comm.ExecuteNonQuery(); --2

答案 1 :(得分:0)

我想在这里为您提供该页面的完整代码。

想法是:我有登记页面。我通过存储过程(DataInserter)将数据传递给DB。

问题在于:在注册期间,用户从他想要回答的信件的下拉列表编号中选择,最后,其他DB表(IncomeLetters.tbl)上的信件状态会发生变化从"待定"(' 1')到"已发布" (' 2&#39)。

我想,我可以向你表达我的意见并感谢你的支持!

protected void Button1_Click(object sender, EventArgs e)
{
   SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MaktubhoConnectionString2"].ConnectionString);
    using (SqlCommand comm = new SqlCommand("DataInserter", conn))
    {
        comm.CommandType = CommandType.StoredProcedure;
        comm.Connection = conn;
        SqlParameter employeeparam = new SqlParameter("EmployeeSentIndex", int.Parse(ddlemployee.SelectedItem.Value));
        SqlParameter doctypeparam = new SqlParameter("doctype_ID", int.Parse(ddldoctype.SelectedItem.Value));
        SqlParameter doccharparam = new SqlParameter("docchar_ID", int.Parse(ddldocchar.SelectedItem.Value));
        SqlParameter authorityparam = new SqlParameter("authority", txtauthority.Text);
        SqlParameter subjectparam = new SqlParameter("subject", txtsubject.Text);

        DateTime dt = DateTime.Now;
        string todasdate = dt.ToString("d", CultureInfo.CreateSpecificCulture("de-DE"));
        SqlParameter entrydateparam = new SqlParameter("entrydate", todasdate);

        string Pathname = "UploadImages/" + Path.GetFileName(FileUpload1.PostedFile.FileName);
        SqlParameter imagepathparam = new SqlParameter("image_path",  Pathname);
        SqlParameter loginparam = new SqlParameter("login", "jsomon");

        comm.Parameters.Add(employeeparam);
        comm.Parameters.Add(doctypeparam);
        comm.Parameters.Add(doccharparam);
        comm.Parameters.Add(authorityparam);
        comm.Parameters.Add(subjectparam);
        comm.Parameters.Add(entrydateparam);
        comm.Parameters.Add(imagepathparam);
        comm.Parameters.Add(loginparam);
        comm.Parameters.Add("@forlabel", SqlDbType.VarChar, 100);
        comm.Parameters["@forlabel"].Direction = ParameterDirection.Output;
        FileUpload1.SaveAs(Server.MapPath("~/UploadImages/" + FileUpload1.FileName));
        string ansTo = ddlAnswerTo.SelectedItem.Value;
        SqlParameter answertoparam = new SqlParameter("answertoparam", ansTo);
        string commandText = "update IncomeLetters set IncomeLetters.docState_ID = '2' where income_number = @answertoparam";
        SqlCommand findincomelett = new SqlCommand(commandText, conn);
        findincomelett.Parameters.Add(answertoparam);
            conn.Open();
            findincomelett.ExecuteNonQuery();
            comm.ExecuteNonQuery();
            lblresult.Visible = true;
            Image1.Visible = true;
            lblresult.Text = "Document number:";
            lblnumber.Visible = true;
            lblnumber.Text = (string)comm.Parameters["@forlabel"].Value; ;
            conn.Close();
        }

    txtauthority.Text = "";
    txtsubject.Text = "";
}

答案 2 :(得分:0)

据我了解,问题是正确的IncomeLetters.docState_ID未更新为' 2'。

您可能需要调试并查看您获得的值:

string ansTo = ddlAnswerTo.SelectedItem.Value;

您希望更新的数据库中的记录可能没有满足where子句的记录' income_number = @ answertoparam'