哪位高手指点一下,上传文件的时候,当两个人同时上传就会报错,这个问题怎么解决

解决方案 »

  1.   

    application.lock()在一般的情况下是用于并发访问所用的锁定。   这里就牵涉到了application与session的一些基本知识了。   (1)application对象用于共享应用程序级信息,即多个用户共享一个application对象,在第一个用户请求            asp.net文件时,将启动应用程序并创建application对象,一旦applicaition对象被创建,它就可以共享          和管理整个应用程序的信息。在应用程序关闭之前,application对象将一直存在。所以,application       对象是用于 启动 和管理asp.net应用程序的主要对象。(比如最简单的统计访问人数,以及聊天室之类)  (2) session对象是用于存储在多个页面调用之间特定用户的信息。session对象只针对单一网站使用者,不同           的客户端无法互相访问. session对象终中止于联机机器离线时,也就是当网站使用者关掉浏览器或者超过           设定session对象的有效时间时,session对象变量就会关闭  而一般的application对象定义在应用程序类(即Global.asax中)。下面给出一个简单的:void Session_Start(object sender, EventArgs e) 
        { 
            // 在新会话启动时运行的代码 
            Application.Lock(); 
            Application["count"] = (int)Application["count"] + 1; 
          
        } 对于这段代码:(1)注意类型要用int进行强制类型转换(2)是新会话启动时的代码,在这里,说明了application.lock是在两个session同时对count进行操作的时候              才起作用。具体的说,就是application.lock后在一个时刻只能供一个访问者使用.        既是说,当一个用户在执行上面两者之间的代码时,其他的用户时不可以访问这段代码的.       换句话说,它是在添加或者更新数据库记录的時候暂时锁定其它用户进行同样的操作。记得老师说的一个最简单形象的例子:就是在网上预定火车票的时候,当只剩下一张火车票的时候,在间隔极短的时间内有三个人都点击了预定的按钮,这时候数据库里面和返回的网页就会使三个人都认为自己买到了火车票。这时候就会出错。这也就是所谓的并发访问,在网速比较慢的时候体现的尤其明显,所以一般对于这种有并发访问可能的都会使用application.lock来预防上述情况发生。(3)在上述代码中没有application.unlock().   在Application.Lock()语句所在的作用域范围内,如果没调用Application.Unlock(),超出作用域范围后Application.Unlock()也会被自动调用。
      

  2.   

    我做个一个错误信息跟踪,错误信息是这个
    System.InvalidOperationException: ExecuteScalar 要求已打开且可用的连接。连接的当前状态为正在连接。
       在 DALDesk.Db_bz_twoService.AddDb_bz_two(Db_bz_two db_bz_two) 位置 E:\Project\DeskTop\DeskTop\DALDesk\Db_bz_twoService.cs:行号 52
       在 BLLDesk.Db_bz_twoManager.AddDb_bz_two(Db_bz_two db_bz_two) 位置 E:\Project\DeskTop\DeskTop\BLLDesk\Db_bz_twoManager.cs:行号 16
       在 VarietyDesktop_PersonalCentre_Upfile.Upload_ServerClick(Object sender, EventArgs e)
    System.InvalidOperationException: ExecuteScalar 要求已打开且可用的连接。连接的当前状态为正在连接。
       在 DALDesk.Db_bz_twoService.AddDb_bz_two(Db_bz_two db_bz_two) 位置 E:\Project\DeskTop\DeskTop\DALDesk\Db_bz_twoService.cs:行号 52
       在 BLLDesk.Db_bz_twoManager.AddDb_bz_two(Db_bz_two db_bz_two) 位置 E:\Project\DeskTop\DeskTop\BLLDesk\Db_bz_twoManager.cs:行号 16
       在 VarietyDesktop_PersonalCentre_Upfile.Upload_ServerClick(Object sender, EventArgs e)
      

  3.   

    与上传无关,主要是上传时的操作
    SQL并发控制
      

  4.   

    检查操作sql时,"ExecuteScalar" conn连接有没有及时关闭.
    conn.closedr.close(0
    dr.dispose()
      

  5.   


    是不是要在Session_start中和上传的函数做一个映射