none
为什么无法更新数据库 RRS feed

  • 问题

  • 我想用C#+ASP.NET+ACCESS做一个通讯录,其中addEdit.aspx网页是用来编辑数据的,但用以下方法修改不了数据库,而且整个过程均未报错,请高手帮帮我。十分感谢。

    前一网页中有超链接到addEdit.aspx,同时传值,用于确定修改哪条记录,

    前一网页中的超链接诘句:

    Response.Redirect("addEdit.aspx?ID=" + varAddID);//varAddID用来定位记录

     

    addEdit.aspx页面如下:

    <input id="btnOK" name="btnOK" type="submit" value="完成" />

    编辑

    姓:<input id="ttbLastName" name="ttbLastName" type="text" value="汪" />         名:<input id="ttbFirstName" name="ttbFirstName" type="text" value="生" />         公司:<input id="ttbCompany" name="ttbCompany" type="text" value="九天" />

    性别:

    <input id="radlSex_0" checked="checked" name="radlSex" type="radio" value="男" /><label for="radlSex_0">男</label>
    <input id="radlSex_1" name="radlSex" type="radio" value="女" /><label for="radlSex_1">女</label>

    修改后,单击“完成”按钮Update数据库

     

      addEdit.aspx.cs完整代码: 

    namespace AddressBook
    {
        public partial class addEdit : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
               
                string strConn = "Provider=Microsoft.Jet.OleDb.4.0;";  //连接数据库字符串
                strConn += @"Data source=C:\ChhAtWin\web\AddressBook\AddressBook\App_Data\AddressBookDB.mdb";

                string strSqlSearch = "select * from Name where addID=" + int.Parse(Request.QueryString["ID"]);  //选择数据字符串

                OleDbConnection connDbab = new OleDbConnection(strConn);  //连接数据库
                OleDbCommand commDbabSearch = new OleDbCommand(strSqlSearch, connDbab);  //操作数据库中的表
                connDbab.Open();
                OleDbDataReader dtrdDbabSearch = commDbabSearch.ExecuteReader();
                dtrdDbabSearch.Read();  //读取记录

                //将记录内容放入文本框中
                if (dtrdDbabSearch.HasRows)    //判断DataReader对象中是否包含任何行
                {
                    ttbLastName.Text = dtrdDbabSearch["LastName"].ToString();
                    ttbFirstName.Text = dtrdDbabSearch["FirstName"].ToString();
                    ttbCompany.Text = dtrdDbabSearch["Company"].ToString();
                    radlSex.Items[0].Selected = (bool)dtrdDbabSearch["Sex"];
                    radlSex.Items[1].Selected = !(bool)dtrdDbabSearch["Sex"];

                }

                connDbab.Close();
               
            }

            protected void btnOK_Click(object sender, EventArgs e)
            {

                string strConn = "Provider=Microsoft.Jet.OleDb.4.0;";  //连接数据库字符串
                strConn += @"Data source=C:\ChhAtWin\web\AddressBook\AddressBook\App_Data\AddressBookDB.mdb";

                string strSqlUpda = "UPDATE Name SET FirstName='" + ttbFirstName.Text + "' where addID=" + int.Parse(Request.QueryString["ID"]);  //更新数据库表字符串
                OleDbConnection connDbab = new OleDbConnection(strConn);  //连接数据库
                OleDbCommand commDbabUpda = new OleDbCommand(strSqlUpda, connDbab);  //操作数据库中的表
                connDbab.Open();
                commDbabUpda.ExecuteNonQuery();  //更新数据库表
                connDbab.Close();
                Response.Write("<script language=javascript>alert('该客户信息更新成功!');</script>");

           }
        }
    }



    2011年7月3日 1:15

答案

全部回复

  • input有runat="server"吗?
    本帖内容仅供参考,没有任何保证. This post is provided without any warranty.
    2011年7月3日 2:41
    版主
  • 你好楼主:)

    请仔细检查以下语句,尤其是Id是否存在于表中——你的Request.QueryString["ID"]是什么内容?

    string strSqlUpda = "UPDATE Name SET FirstName='" + ttbFirstName.Text + "' where addID=" + int.Parse(Request.QueryString["ID"]); 

    建议调试程序,把strSqlUpda黏贴到SQL management Studio中测试看看那可以不?我怀疑问题处在这里。


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月3日 7:02
  • 我认为可能是没有IsPostBack的校验,导致数据重复绑定

        protected void Page_Load(object sender, EventArgs e)
        {
          if(!IsPostBack){
          string strConn = "Provider=Microsoft.Jet.OleDb.4.0;"; //连接数据库字符串
          strConn += @"Data source=C:\ChhAtWin\web\AddressBook\AddressBook\App_Data\AddressBookDB.mdb";
    
          string strSqlSearch = "select * from Name where addID=" + int.Parse(Request.QueryString["ID"]); //选择数据字符串
    
          OleDbConnection connDbab = new OleDbConnection(strConn); //连接数据库
          OleDbCommand commDbabSearch = new OleDbCommand(strSqlSearch, connDbab); //操作数据库中的表
          connDbab.Open();
          OleDbDataReader dtrdDbabSearch = commDbabSearch.ExecuteReader();
          dtrdDbabSearch.Read(); //读取记录
    
          //将记录内容放入文本框中
          if (dtrdDbabSearch.HasRows)  //判断DataReader对象中是否包含任何行
          {
            ttbLastName.Text = dtrdDbabSearch["LastName"].ToString();
            ttbFirstName.Text = dtrdDbabSearch["FirstName"].ToString();
            ttbCompany.Text = dtrdDbabSearch["Company"].ToString();
            radlSex.Items[0].Selected = (bool)dtrdDbabSearch["Sex"];
            radlSex.Items[1].Selected = !(bool)dtrdDbabSearch["Sex"];
    
          }
    
          connDbab.Close();
          
        }
    }
    

     


    算神的博客
    2011年7月4日 0:28
  • ID是前一网页中的传值,用来定义需要编辑的记录。

    前一网页中的超链接诘句:

    Response.Redirect("addEdit.aspx?ID=" + varAddID);//varAddID用来定位记录

    2011年7月4日 1:42
  • ID是前一网页中的传值,用来定义需要编辑的记录。

    前一网页中的超链接诘句:

    Response.Redirect("addEdit.aspx?ID=" + varAddID);//varAddID用来定位记录


    你好,我的意思是让你查询

    string strSqlUpda = "UPDATE Name SET FirstName='" + ttbFirstName.Text + "' where addID=" + int.Parse(Request.QueryString["ID"]);

    这句话中的Id,因为你这句话就是Update作用的。检查Id是否存在于表中。


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月4日 1:43
  • 我试了你的方法,出现了这样的情况:

    我在页面上对选定的记录通过文本框进行修改后(详见我的代码),单击完成按钮,文本框中的内容已经被更新了。但数据库仍未更新,不知何故?

    2011年7月5日 6:20
  • ID存在于表中的
    2011年7月5日 6:22
  • 试试我说的办法吧
    算神的博客
    2011年7月5日 8:52
  • 算神:我是试了你的办法,出现了这样的情况:

    我在页面上对选定的记录通过文本框进行修改后(详见我的代码),单击完成按钮,文本框中的内容已经被更新了。但数据库仍未更新,不知何故?

    2011年7月6日 13:46
  • 先注释掉数据库操作相关的语句,看看SQL语句输出对了没,把他复制到ACCESS能否正常执行

      Response.Write( strSqlUpda );


    算神的博客
    2011年7月6日 15:56
  • 楼主:)

    请务必自己核查你的Update是不是包所有要更新的字段全部包含到里边去了?


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月7日 8:34