我用SqlDataReader从数据库的表中读取一条数据,并更新这个表中的编号。SQL更新语句:string str="update patentInfo set pid='"+this.txtpid.Text+"' where pid='"+this.txtpid.Text+"' ";表patentInfo:id(nvarchar),name(nvarchar)字段构成。我总是更新不成功。。我写的where条件可能不对,菜鸟请高手指点。

解决方案 »

  1.   

    pid是主键?然后在数据库这个值是否存在?
      

  2.   

    看看代码吧,这个Sql是在哪里执行的?
      

  3.   

    SqlDataReader是读数据.  应该是  select * from  表这才能叫读
    update 是更新。你要用 SqlCommand 的  ExcuteNoneQuery()
      

  4.   

    应该是咯.
    1、你这个条件 where pid='"+this.txtpid.Text+"' 。
    执行SQL 先检查你这个条件,再更新。 你的条件查不到,因为你还没更新进去呢。
    2、pid 是主键吗 表里都没这个字段,好像有个id 
    3、你要 设置你的 主键id  int类型,这样 根据主键来查更容易。
      

  5.   



    string SLink ="uid=sa;pwd=sa;database=patent;server SqlConnection CnSql = new SqlConnection (SLink); 
    CnSql.Open(); //打开数据库  
    string stradd="update patentInfo set pid='"+this.txtpid.Text+"' where pid=2";
    SqlCommand cmd=new SqlCommand (stradd,CnSql);//创建Command命令对象
    cmd.ExecuteNonQuery();  //执行SQL指令,并将其结果设定给DataReader
    CnSql.Close();
    Response.Write("<script>alert('修改成功!')</script>"); 
      

  6.   

    代码如下:
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    string SLink ="uid=sa;pwd=sa;database=patent;server=.";//定义一个数据库链接字符串。请注意:此句中的Server.MapPath,相对路径功能的实现就是靠它实现
    SqlConnection CnSql = new SqlConnection (SLink); //生成一个新的连接
    string strupdate ="SElECT * FROM patentinfo ";
    SqlCommand cmd=new SqlCommand (strupdate,CnSql);//创建Command命令对象
    CnSql.Open(); //打开数据库  
    SqlDataReader rdr; //声明一个DataReader对象
    rdr=cmd.ExecuteReader();
    while(rdr.Read())
    {
    this.txtpid.Text=rdr.GetValue(0)+"";

    }
    rdr.Close();
    CnSql.Close();
    }
    private void Badd_Click(object sender, System.EventArgs e)
    {

    string SLink ="uid=sa;pwd=sa;database=patent;server=.";//定义一个数据库链接字符串。请注意:此句中的Server.MapPath,相对路径功能的实现就是靠它实现
    SqlConnection CnSql = new SqlConnection (SLink); //生成一个新的连接
    CnSql.Open(); //打开数据库  
    string stradd="update patentInfo set pid='"+this.txtpid.Text+"' where pid=2";
    SqlCommand cmd=new SqlCommand (stradd,CnSql);//创建Command命令对象
    cmd.ExecuteNonQuery();  //执行SQL指令,并将其结果设定给DataReader
    CnSql.Close();
    Response.Write("<script>alert('修改成功!')</script>"); 
    Response.Write("<script language=javascript>window.close();</script>"); 
    }
      

  7.   

    asp.net夜话之七:ADO.NET介绍
    ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。
      

  8.   

    Command对象
    Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType 属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。
    Command主要有三个方法:
    ExecuteNonQuery () :执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。
    ExecuteReader ():执行一个查询的SQL语句,返回一个DataReader对象。
    ExecuteScalar ():从数据库检索单个值。这个方法主要用于统计操作。
      

  9.   

    我用ExecuteNonQuery () 了啊 。你用这个不也要一条sql更新的语句啊。我那sql语句写的有问题,怎么写???我的想法是有个文本框先从数据库中把这条数据的编号读出来并在文本框中显示,然后再更新。
      

  10.   

    应该是:
    string str="update patentInfo set pid='"+this.txtpid.Text+"' where pid='"+Request.QueryString["id"]+"'";
      

  11.   


    呵呵刚才少些了个p,一下是正解
    string str="update patentInfo set pid='"+this.txtpid.Text+"' where pid='"+Request.QueryString["pid"]+"'";