首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

数据库操作的有关问题

2012-02-26 
数据库操作的问题publicSqlDataReaderselectlendrtnrec(stringreaderid,stringbookid)//查询是否这位读者

数据库操作的问题
public   SqlDataReader   selectlendrtnrec(string   readerid,   string   bookid)//查询是否这位读者借阅了这本图书
                {
                        string   cmdtext   =   "select   *   from     lendrtnrec   where   readerid= "   +   " ' "   +   readerid   +   " ' "   +   "and   bookid= "   +   " ' "   +   bookid   +   " ' ";
                        SqlCommand   mycommand   =   new   SqlCommand(cmdtext,   myconn);
                        myconn.Open();
                        SqlDataReader   dr   =   mycommand.ExecuteReader(CommandBehavior.CloseConnection);
                     
                        return   dr;
                }
  public   int   returnbook(string   readerid,   string   bookid)//归还图书,操作lendrtnrec,readerinfo,bookinfo三个表
                {
                        string   cmdtext1   =   "delete   lendrtnrec   where   readerid= "   +   " ' "   +   readerid   +   " ' "   +   "and   bookid= "   +   " ' "   +   bookid   +   " ' ";
                        string   cmdtext2= "update   readerinfo   set   借书总数   =借书总数-1,未还书数=未还书数-1   where   编号= "+ " ' "+readerid   + " ' ";
                        string   cmdtext3   =   "update   bookinfo   set   数量=数量+1   where   图书编号= "   +   " ' "   +   bookid   +   " ' ";
                        myconn.Open   ();
                        SqlCommand   mycommand1   =   new   SqlCommand(cmdtext1,   myconn);
                        SqlCommand   mycommand2   =   new   SqlCommand(cmdtext2,   myconn);
                        SqlCommand   mycommand3   =   new   SqlCommand(cmdtext3,   myconn);
                        mycommand2.ExecuteNonQuery();
                        mycommand3.ExecuteNonQuery();
                        int   nresult   =   mycommand1.ExecuteNonQuery();
                        myconn.Close();
                        return   nresult;



                }
private   void   button1_Click(object   sender,   EventArgs   e)
                {
                        SqlDataReader   dr   =   user.selectlendrtnrec(textBox1.Text,   textBox2.Text);
                        string   ss   =   " ";
                        if   (dr.Read())
                        {
                                ss   =   dr[0].ToString();
                        }
                        if   (ss   !=   " "   &&   ss   !=   null)
                        {      
                               
                                user.returnbook(textBox1.Text,   textBox2.Text);
                        }
                        else   {   MessageBox.Show( "该读者未借阅该图书,请确认是否输错! ");   }
                }

我想先确认是否有这条记录,然后再执行returnbook,出现错误,连接未关闭。连接的当前状态为已打开。
请问怎么做才能成功?returnbook部分怎么才能做到3个表同时更新,而不是一个出现错误不能更新,而另外两个却更新了?

[解决办法]
把更新3个表的代码做成一个事务,出现错误即回滚即可。
[解决办法]
定义一StringBuilder类型变量 str
str.Append(cmdtext1).Append(cmdtext2).Append(cmdtext3);
myconn.Open ();
SqlCommand mycommand1 = new SqlCommand(str.ToString(), myconn);
int nresult = mycommand1.ExecuteNonQuery();
myconn.Close();
return nresult;

[解决办法]
注意哪个public SqlDataReader selectlendrtnrec(string readerid, string bookid)方法中返回的 dr, 这个东东用完(无论正常与否)就要调用其Close()方法关闭,否则该数据库连接将一直挂起(),这样使用SqlDataReader不是很好。另外数据库连接尽量用完就关闭。


[解决办法]
SQL 2005上有详细的代码讲解事务
[解决办法]
public bool selectlendrtnrec(string readerid, string bookid)//修改返回值为bool就足够了

returnbook使用事务
[解决办法]
用事务试试看……

热点排行