代码如下:
         private void btnReturn_Click(object sender, EventArgs e)
        {
            DataSet ds = new DataSet();
            string strsql = "select * from BorrowBook";
            SqlDataAdapter da = new SqlDataAdapter(strsql,this.sqlConnection1);
            da.Fill(ds, "还书表");
            SqlCommandBuilder sqlcdb = new SqlCommandBuilder(da);
            ds.Tables["还书表"].PrimaryKey = new DataColumn[] { ds.Tables["还书表"].Columns["ID"] };
            for (int i = 0; i < ds.Tables["还书表"].Rows.Count; i++)
            {
                if (ds.Tables["还书表"].Rows[i]["ReaderID"].ToString() == this.textReaderID.Text && ds.Tables["还书表"].Rows[i]["BookID"].ToString() == this.textBookID.Text)
                {
                    int dday = System.DateTime.Today.DayOfYear - ((System.DateTime)ds.Tables["还书表"].Rows[i]["ReturnDate"]).DayOfYear;
                    ds.Tables["还书表"].Rows[i]["FactReturnDate"] = System.DateTime.Today;
                    da.Update(ds,"还书表");
                    ds.AcceptChanges();
                    if (dday > 0)
                    {
                        MessageBox.Show(this.textInformation.Text = this.textReaderID.Text + "读者你的" + this.textBookID.Text + "图书已经过期" + Convert.ToString(dday)
                            + "天,罚款" + Convert.ToString(dday / 10) + "元RMB", "过期", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
                    }
                }
                
            }
            ReturnBook(this.textBookID.Text);
            ReturnReader(this.textReaderID.Text);
            this.textInformation.Text = this.textReaderID.Text + "归还图书" + this.textBookID.Text + "成功";
        }以上代码是想实现更新数据表“BorrowBook”中的FactReturnDate字段,通过“ds.Tables["还书表"].Rows[i]["FactReturnDate"] = System.DateTime.Today;”来获取系统时间,但是通过以上这个函数却更新不了,不知道哪里出错了?

解决方案 »

  1.   

    没报错误,可是却没有插进数据库,数据库那个字段的数据类型是datatime
      

  2.   

    LZ先检查 datarow的状态是"Added" or "modified"or "deleted",因为dataadapter.update是根据这些状态调用 insert,update or delete sqlcommand德,如果状态没变,当然不会对数据库操作
      

  3.   

    如何知道datarow的状态是"Added" or "modified"or "deleted"?且该怎样修改datarow的状态?
      

  4.   

    跟踪到Rowstate属性,那怎么样修改呀,它不是只读属性吗?应该不是这个地方出错吧..
      

  5.   

    如果是added的话有datarow.setadd()方法
      

  6.   

    你跟踪到要写数据库那datarow的rowstate是什么?
      

  7.   

    跟踪Rowstate属性的代码应该怎样写呀
      

  8.   

    应该是没有建立表映射与列映射的原因,像下面这样试试
              MSSQLConn conn = DBConn.MSSQL;
                SqlConnection m_conn = conn.Conn;            SqlCommand UpdateH = new SqlCommand("t_BJ_BJUpdate", m_conn);
                UpdateH.CommandType = CommandType.StoredProcedure;
                SqlCommand insertM = new SqlCommand("t_BJ_BJsInsert", m_conn);
                insertM.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter sda = new SqlDataAdapter();
                sda.InsertCommand = insertM;
                sda.TableMappings.Add("Bs", "t_BjBills");
                SqlParameterCollection sqlp = insertM.Parameters;            sqlp.Add("@BJID", SqlDbType.Int);
                sqlp.Add("@inid", SqlDbType.Int, 4, "inid");
                sqlp.Add("@InvID", SqlDbType.Int, 4, "InvID");
                sqlp.Add("@Qty", SqlDbType.Money, 8, "Qty");
                sqlp.Add("@Cost", SqlDbType.Money, 8, "Cost");
                sqlp.Add("@ReBatch", SqlDbType.NVarChar, 30, "ReBatch");
                sqlp.Add("@Quo", SqlDbType.Float, 8, "Quo");
                sqlp.Add("@TaxP", SqlDbType.Money, 8, "TaxP");
                sqlp.Add("@SumP", SqlDbType.Money, 8, "SumP");
                sqlp.Add("@Term", SqlDbType.NVarChar, 4, "Term");
                sqlp.Add("@RQty", SqlDbType.Money, 8, "RQty");
                sqlp.Add("@RSumP", SqlDbType.Money, 8, "RSumP");
                sqlp.Add("@RDate", SqlDbType.DateTime, 8, "RDate");
                sqlp.Add("@CusID", SqlDbType.Int);
                sqlp.Add("@Memo", SqlDbType.NVarChar, 40, "Memo");
                sqlp["@CusID"].Value = bill.B[0].CusID;
                sqlp["@BJID"].Value = bill.B[0].BJID;
      

  9.   

    ddkc_c ,我不是很明白你的说法,你提供的代码应该怎样用到我的代码中呢?
      

  10.   

    前面有段代码差不多一样的,但是却可以更新数据库.
    代码如下:
     private bool BorrowReader(string textReaderID)
            {
                if (ReaderBorrowedNumber(textReaderID) < 8)
                {
                    this.sqlConnection1.Open();
                    DataSet ds = new DataSet();
                    string strsql = "select * from Reader";
                    SqlDataAdapter da = new SqlDataAdapter(strsql, this.sqlConnection1);
                    da.Fill(ds, "读者表");
                    ds.Tables["读者表"].PrimaryKey = new DataColumn[] { ds.Tables["读者表"].Columns["ReaderID"] };
                    for (int i = 0; i < ds.Tables["读者表"].Rows.Count; i++)
                    {
                        if (ds.Tables["读者表"].Rows[i]["ReaderID"].ToString() == textReaderID)
                        {
                            ds.Tables["读者表"].Rows[i]["ReaderBorrowedbooks"] =Convert.ToInt32(ds.Tables["读者表"].Rows[i]["ReaderBorrowedbooks"]) + 1;
                        }
                    }
                    SqlCommandBuilder aqlcdb = new SqlCommandBuilder(da);
                    da.Update(ds, "读者表");
                    ds.AcceptChanges();
                    this.sqlConnection1.Close();
                    return true;
                }
                else
                    return false;
            }