C#读取大文件(二)

简介:
System.Windows.Forms.Button btnOk =  null ;    
         System.Windows.Forms.Label lblShowPercent =  null ;    
          foreach (System.Windows.Forms.Control control  in  frmProgress.Controls)    
         {    
             if (control.GetType().ToString() ==  "System.Windows.Forms.ProgressBar" )    
            {    
             prgLoader = (System.Windows.Forms.ProgressBar)control;    
            }    
             if (control.GetType().ToString() ==  "System.Windows.Forms.Button" )    
            {    
             btnOk = (System.Windows.Forms.Button)control;    
            }    
             if (control.GetType().ToString() ==  "System.Windows.Forms.Label"  && control.Name ==  "lblShowPercent" )    
            {    
             lblShowPercent = (System.Windows.Forms.Label)control;    
            }    
         }    
             
         frmProgress.Show();    
          //启动转换    
         state = 2;    
 
          if (fs.Length > 2147483647 || fs.Length == 0)  //因为image列最多只能存储2,147,483,647个字节,所以这里做限定    
         {    
             return   false ;    
         }    
         intLength = ( int )fs.Length;    
         intCount = intLength / intBlock;    
 
          if (intCount == 0)    
         {    
            strSelect = strTargetInsert;    
            bytContent =  new   byte [intLength];    
            bytContent = br.ReadBytes(intLength);    
            sqlcmd.CommandText = strSelect;    
            sqlcmd.Parameters.Add( "@block" ,System.Data.SqlDbType.Image).Value = bytContent;    
            sqlcmd.ExecuteNonQuery();    
 
         }    
          else     
         {    
            strSelect = strTargetInsert;    
            bytContent =  new   byte [intBlock];    
            bytContent = br.ReadBytes(intBlock);    
 sqlcmd.CommandText = strSelect;    
            sqlcmd.Parameters.Add( "@block" ,System.Data.SqlDbType.Image).Value = bytContent;    
            sqlcmd.Parameters.Add( "@length" ,System.Data.SqlDbType.Int).Value = 0;    
            sqlcmd.ExecuteNonQuery();    
                            
             int  i = 1;    
             while (i != intCount)    
            {    
              if (state == 0)    
             {    
                strSelect =  "delete from "  + strTableName + strTargetHandle.Substring(strTargetHandle.LastIndexOf( " where " ));    
                sqlcmd.CommandText = strSelect;    
                sqlcmd.ExecuteNonQuery();    
                bytContent =  null ;    
                fs.Close();    
                 return   false ;    
             }    
             strSelect =  "declare @content varbinary(16) " ;    
             strSelect += strTargetHandle;    
             strSelect +=  " updatetext "  + strTableName +  "."  + strColumnName +  " @content @length 0 @block" ;    
                 
             bytContent = br.ReadBytes(intBlock);    
 
             sqlcmd.Parameters[ "@block" ].Value = bytContent;    
             sqlcmd.Parameters[ "@length" ].Value = i * intBlock;    
             sqlcmd.CommandText = strSelect;    
             sqlcmd.ExecuteNonQuery();    
                 
             intPercent = ( int )((( double )(i * intBlock)) / (( double )intLength) * 100);    
             prgLoader.Value = intPercent;    
             lblShowPercent.Text = prgLoader.Value.ToString() +  "%" ;    
             ++i;    
             Application.DoEvents();    
            }    
 
             int  intResidual = intLength % intBlock;    
     if (intResidual > 0)    
            {    
             strSelect =  "declare @content varbinary(16) " ;    
             strSelect += strTargetHandle;    
             strSelect +=  " updatetext "  + strTableName +  "."  + strColumnName +  " @content @length 0 @block" ;    
 
             bytContent =  new   byte [intResidual];    
             bytContent = br.ReadBytes(intResidual);    
                                            
             sqlcmd.Parameters[ "@block" ].Value = bytContent;    
             sqlcmd.Parameters[ "@length" ].Value = intCount * intBlock;    
             sqlcmd.CommandText = strSelect;    
             sqlcmd.ExecuteNonQuery();            
            }    
         }    
         prgLoader.Value = 100;    
         lblShowPercent.Text = prgLoader.Value.ToString() +  "%" ;    
         btnOk.Text =  "关闭" ;    
 
        }    
         else     
        {    
          if (fs.Length > 2147483647 || fs.Length == 0)  //因为image列最多只能存储2,147,483,647个字节,所以这里做限定    
         {    
             return   false ;    
         }    
         intLength = ( int )fs.Length;    
         intCount = intLength / intBlock;    
 
          if (intCount == 0)    
         {    
            strSelect = strTargetInsert;    
            bytContent =  new   byte [intLength];    
            bytContent = br.ReadBytes(intLength);    
            sqlcmd.CommandText = strSelect;    
            sqlcmd.Parameters.Add( "@block" ,System.Data.SqlDbType.Image).Value = bytContent;    
            sqlcmd.ExecuteNonQuery();    
         }    
          else     
         {    
            strSelect = strTargetInsert;    
bytContent =  new   byte [intBlock];    
            bytContent = br.ReadBytes(intBlock);    
            sqlcmd.CommandText = strSelect;    
            sqlcmd.Parameters.Add( "@block" ,System.Data.SqlDbType.Image).Value = bytContent;    
            sqlcmd.Parameters.Add( "@length" ,System.Data.SqlDbType.Int).Value = 0;    
            sqlcmd.ExecuteNonQuery();    
            
             int  i = 1;    
             while (i != intCount)    
            {    
             strSelect =  "declare @content varbinary(16) " ;    
             strSelect += strTargetHandle;    
             strSelect +=  " updatetext "  + strTableName +  "."  + strColumnName +  " @content @length 0 @block" ;    
                 
             bytContent = br.ReadBytes(intBlock);    
 
             sqlcmd.Parameters[ "@block" ].Value = bytContent;    
             sqlcmd.Parameters[ "@length" ].Value = i * intBlock;    
             sqlcmd.CommandText = strSelect;    
             sqlcmd.ExecuteNonQuery();    
             ++i;    
            }    
 
             int  intResidual = intLength % intBlock;    
             if (intResidual > 0)    
            {    
             strSelect =  "declare @content varbinary(16) " ;    
             strSelect += strTargetHandle;    
             strSelect +=  " updatetext "  + strTableName +  "."  + strColumnName +  " @content @length 0 @block" ;    
 
             bytContent =  new   byte [intResidual];    
             bytContent = br.ReadBytes(intResidual);    
                                            
             sqlcmd.Parameters[ "@block" ].Value = bytContent;    

             sqlcmd.Parameters["@length"].Value = intCount * intBlock;    



本文转自 BruceAndLee 51CTO博客,原文链接:http://blog.51cto.com/leelei/194145,如需转载请自行联系原作者

相关文章
|
前端开发 C#
C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小
C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小
|
大数据 C#
C# 读取大文件 (可以读取3GB大小的txt文件)
原文:C# 读取大文件 (可以读取3GB大小的txt文件) 在处理大数据时,有可能 会碰到 超过3GB大小的文件,如果通过 记事本 或 NotePad++去打开它,会报错,读不到任何文件。
4275 1
|
C# 内存技术
C# FileStream复制大文件
即每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。 本文转载:http://www.cnblogs.com/wolf-sun/p/3345392.html     FileStream缓冲读取和写入可以提高性能。
1391 0
|
2月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
44 3
|
19天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
69 12
|
2月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
75 4