首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新access数据库

更新access数据库
EN

Stack Overflow用户
提问于 2013-04-29 14:20:42
回答 3查看 238关注 0票数 1

我有一个页面,在Page_Load上,我用我从数据库中获得的数据填充了一些文本框和下拉列表,我得到了正确的数据,但当我单击按钮保存新数据时,它会接受旧数据,而不是用于更新的新数据。

我把我的代码: Page_load:

代码语言:javascript
复制
string id = Request.QueryString["id"];

        OleDbConnection conn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath("path to DB"));
        OleDbCommand comm = new OleDbCommand("select * from table where ID=" + id, conn);
        OleDbDataReader reader;

        conn.Open();
        reader = comm.ExecuteReader();
        reader.Read();


        ddlType.SelectedIndex = (Convert.ToInt32(reader["PersonType"]) - 1); // -1 to fix position, list is zero based. type 1(0) = PP type 2(1) = DC

        txtFirstName.Text = reader["FirstName"].ToString();
        txtLastName.Text = reader["LastName"].ToString();
        txtAddress.Text = reader["Address"].ToString();
        txtCountry.Text = reader["Country"].ToString();
        txtPhone.Text = reader["Phone"].ToString();
        txtFax.Text = reader["Fax"].ToString();
        txtClinic.Text = reader["Clinic"].ToString();
        txtReferredBy.Text = reader["ReferingFactor"].ToString();
        txtWebSite.Text = reader["WebSite"].ToString();
        txtReceiptNumber.Text = reader["Receipt"].ToString();
        txtDeviceType.Text = reader["DeviceType"].ToString();
        txtDeviceSerialNumber.Text = reader["DeviceSerialNumber"].ToString();
        txtPaymentType.Text = reader["PaymentType"].ToString();
        txtDevicePrice.Text = reader["DevicePrice"].ToString();
        txtClientUserName.Text = reader["PersonUserName"].ToString();
        txtClientPassword.Text = reader["PersonPassword"].ToString();
        txtComments.Text = reader["Comment"].ToString();

保存按钮:

代码语言:javascript
复制
string personType = ddlType.SelectedValue;
        string firstName = txtFirstName.Text;
        string lastName = txtLastName.Text;
        string address = txtAddress.Text;
        string country = txtCountry.Text;
        string phone = txtPhone.Text;
        string fax = txtFax.Text;
        string clinic = txtClinic.Text;
        string referredBy = txtReferredBy.Text;
        string website = txtWebSite.Text;
        string receiptNumber = txtReceiptNumber.Text;
        string deviceType = txtDeviceType.Text;
        string deviceSerialNumber = txtDeviceSerialNumber.Text;
        string paymentType = txtPaymentType.Text;
        string devicePrice = txtDevicePrice.Text;
        string clientUserName = txtClientUserName.Text;
        string clientPassword = txtClientPassword.Text;
        string comments = txtComments.Text;



        string id = Request.QueryString["id"];

        OleDbConnection conn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath("path to DB"));
        string str = "update table set PersonType = ?, FirstName = ?, LastName = ?, Address = ?, Country = ?, Phone = ?, Fax = ?, Clinic = ?, ReferingFactor = ?, WebSite = ?, Receipt = ?, DeviceType = ?, DeviceSerialNumber = ?, PaymentType = ?, DevicePrice = ?,PersonUserName = ?, PersonPassword = ?, Comment = ? where ID = ?";
        using (conn)
        {
            using (OleDbCommand cmd = new OleDbCommand(str, conn))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("PersonType", personType);
                cmd.Parameters.AddWithValue("FirstName", firstName);
                cmd.Parameters.AddWithValue("LastName", lastName);
                cmd.Parameters.AddWithValue("Address", address);
                cmd.Parameters.AddWithValue("Country", country);
                cmd.Parameters.AddWithValue("Phone", phone);
                cmd.Parameters.AddWithValue("Fax", fax);
                cmd.Parameters.AddWithValue("Clinic", clinic);
                cmd.Parameters.AddWithValue("ReferingFactor", referredBy);
                cmd.Parameters.AddWithValue("WebSite", website);
                cmd.Parameters.AddWithValue("Receipt", receiptNumber);
                cmd.Parameters.AddWithValue("DeviceType", deviceType);
                cmd.Parameters.AddWithValue("DeviceSerialNumber", deviceSerialNumber);
                cmd.Parameters.AddWithValue("PaymentType", paymentType);
                cmd.Parameters.AddWithValue("DevicePrice", devicePrice);
                cmd.Parameters.AddWithValue("PersonUserName", clientUserName);
                cmd.Parameters.AddWithValue("PersonPassword", clientPassword);
                cmd.Parameters.AddWithValue("Comment", comments);
                cmd.Parameters.AddWithValue("PersonID", id);

                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }

我做错了什么,我如何改正它?如果我之前问过这个问题,很抱歉,我没有找到答案。我认为它与回发有关,对吗?

如果你需要更多的信息,请写给我所需要的。谢谢(我编辑了命令字符串上的一些单词)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-29 14:25:14

你必须像这样使用Page.IsPostback属性

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
             // Put your code inside this.
             string id = Request.QueryString["id"];
             OleDbConnection conn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath("path to DB"));
    OleDbCommand comm = new OleDbCommand("select * from table where ID=" + id, conn);
    OleDbDataReader reader;
    conn.Open();
    reader = comm.ExecuteReader();
    reader.Read();
    ddlType.SelectedIndex = (Convert.ToInt32(reader["PersonType"]) - 1); // -1 to fix position, list is zero based. type 1(0) = PP type 2(1) = DC

    txtFirstName.Text = reader["FirstName"].ToString();
    txtLastName.Text = reader["LastName"].ToString();
    txtAddress.Text = reader["Address"].ToString();
    txtCountry.Text = reader["Country"].ToString();
    txtPhone.Text = reader["Phone"].ToString();
    txtFax.Text = reader["Fax"].ToString();
    txtClinic.Text = reader["Clinic"].ToString();
    txtReferredBy.Text = reader["ReferingFactor"].ToString();
    txtWebSite.Text = reader["WebSite"].ToString();
    txtReceiptNumber.Text = reader["Receipt"].ToString();
    txtDeviceType.Text = reader["DeviceType"].ToString();
    txtDeviceSerialNumber.Text = reader["DeviceSerialNumber"].ToString();
    txtPaymentType.Text = reader["PaymentType"].ToString();
    txtDevicePrice.Text = reader["DevicePrice"].ToString();
    txtClientUserName.Text = reader["PersonUserName"].ToString();
    txtClientPassword.Text = reader["PersonPassword"].ToString();
    txtComments.Text = reader["Comment"].ToString();
            }

        }

希望它能起作用..

票数 2
EN

Stack Overflow用户

发布于 2013-04-29 14:25:39

这是因为您正在将旧值传递到数据库。

在更新查询中的textbox中传递新值。

示例:

代码语言:javascript
复制
OleDbConnection conn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath("path to DB"));
        string str = "update table set PersonType = ?, FirstName = ?, LastName = ?, Address = ?, Country = ?, Phone = ?, Fax = ?, Clinic = ?, ReferingFactor = ?, WebSite = ?, Receipt = ?, DeviceType = ?, DeviceSerialNumber = ?, PaymentType = ?, DevicePrice = ?,PersonUserName = ?, PersonPassword = ?, Comment = ? where ID = ?";
        using (conn)
        {
            using (OleDbCommand cmd = new OleDbCommand(str, conn))
            {
                cmd.CommandType = CommandType.Text;

                cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);
                cmd.Parameters.AddWithValue("LastName", lastName);
                .
                .
                .
            }
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
票数 1
EN

Stack Overflow用户

发布于 2013-04-29 14:26:12

当页面仅第一次加载时,则应将数据加载到控件

代码语言:javascript
复制
if (!IsPostBack)
            {
txtFirstName.Text = reader["FirstName"].ToString();
        txtLastName.Text = reader["LastName"].ToString();
        txtAddress.Text = reader["Address"].ToString();
        txtCountry.Text = reader["Country"].ToString();
        txtPhone.Text = reader["Phone"].ToString();
        txtFax.Text = reader["Fax"].ToString();
        txtClinic.Text = reader["Clinic"].ToString();
        txtReferredBy.Text = reader["ReferingFactor"].ToString();
        txtWebSite.Text = reader["WebSite"].ToString();
        txtReceiptNumber.Text = reader["Receipt"].ToString();
        txtDeviceType.Text = reader["DeviceType"].ToString();
        txtDeviceSerialNumber.Text = reader["DeviceSerialNumber"].ToString();
        txtPaymentType.Text = reader["PaymentType"].ToString();
        txtDevicePrice.Text = reader["DevicePrice"].ToString();
        txtClientUserName.Text = reader["PersonUserName"].ToString();
        txtClientPassword.Text = reader["PersonPassword"].ToString();
        txtComments.Text = reader["Comment"].ToString();
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16272367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档