0

我正在开发一个 ASP.NET C# 网站(我对它还很陌生),并且在使用文本框更新 SQL 数据库时遇到了麻烦。

如果页面加载时文本框为空,我可以使用文本框更新数据库,但是如果我最初添加代码以将 SQL 数据从数据库拖到文本框中,则我无法在提交时更改数据。

protected void updatebutton_Click(object sender, EventArgs e)
    {

            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["overlandconnectionstring2"].ConnectionString);
            con.Open();
            string insCmd = "UPDATE Stock SET [make] = @make, [model] = @model where SID ='" + Label1.Text + "'";

            SqlCommand editUser = new SqlCommand(insCmd, con);

            editUser.Parameters.AddWithValue("@make", make.Text);
            editUser.Parameters.AddWithValue("@model", model.Text);

            try
            {

                editUser.ExecuteNonQuery();

                con.Close();
                Response.Redirect("../stockkey1.aspx");


            }
            catch (Exception)
            {
                Response.Write("<br/>Something really bad happened, Please try again<br/>");
            }

            finally
            {
                con.Close();
            }
        }

我的更新代码是否可以正常工作,但如果我将其添加到页面加载中则不起作用。

protected void Page_Load(object sender, EventArgs e)
    {

        if (Session["New"] != null)
        {

            Label2.Text = Session["New"].ToString();


            SqlConnection con1 = new SqlConnection(ConfigurationManager.ConnectionStrings["overlandconnectionstring2"].ConnectionString);
            con1.Open();
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand("select * from Stock where SID='" + Label1.Text + "'", con1);
            myReader = myCommand.ExecuteReader();

            while (myReader.Read())
            {
                make.Text = (myReader["make"].ToString());
                model.Text = (myReader["model"].ToString());
            }
            con1.Close();

我有它,因此该页面需要一个登录会话,该会话是会话,可以忽略。

使用此代码,它从我希望更改的字段的 SQL 数据库中获取数据,并将其输入到页面加载时的文本框中。

如果我在输入页面加载数据后编辑文本框并单击提交,则代码将转到

 try
    {

        editUser.ExecuteNonQuery();

        con.Close();
        Response.Redirect("../stockkey1.aspx");


    }
    catch (Exception)
    {
        Response.Write("<br/>Something really bad happened, Please try again<br/>");
    }

    finally
    {
        con.Close();
    }

正如预期的那样,但没有失败并显示响应,但错过了 editUser.ExecuteNonQuery(); 命令并直接重定向到重定向。

我唯一的想法是 .ToString 转换导致了这种情况,但我不确定。

如果你有任何想法,我很想听听他们...

谢谢你!!

4

2 回答 2

0

你试过@model where SID ='" + Label1.Text.Trim() + "'";

于 2013-07-02T12:45:35.647 回答
0

检查页面是否在页面加载事件中被回发。仅当 isPostback 为 false 时才加载文本框。如果您不这样做,那么每次回发都会重新加载文本框,从而在更新之前丢失您的更改

protected void Page_Load(object sender, EventArgs e)
{ 
if (!Page.IsPostBack)
{
    if (Session["New"] != null)
    {

        Label2.Text = Session["New"].ToString();
        SqlConnection con1 = new SqlConnection(ConfigurationManager.ConnectionStrings["overlandconnectionstring2"].ConnectionString);
        con1.Open();
        SqlDataReader myReader = null;
        SqlCommand myCommand = new SqlCommand("select * from Stock where SID='" + Label1.Text + "'", con1);
        myReader = myCommand.ExecuteReader();

        while (myReader.Read())
        {
            make.Text = (myReader["make"].ToString());
            model.Text = (myReader["model"].ToString());
        }
        con1.Close();
}
}
于 2013-07-02T18:26:01.417 回答