2010年2月24日星期三

Sql Sever大文件分段读取下载



Sql Sever大文件下载,如果直接使用Response.BinaryWrite(bytes);文件过大会出现错误:

[ArgumentOutOfRangeException: Specified argument was out of the range of valid values.

可以考虑分段读取大文件 

using (SqlConnection cn = new SqlConnection(“。。。”))

            {

                cn.Open();

                string strSql2 = "select ID,DocName,DocContent,ConType from Forum_MessageDoc where ID=" + Request.Params["AssID"];

                using(SqlCommand cmd = cn.CreateCommand())

                {

                    cmd.CommandText = strSql2;

                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);

                    const int buffersize = 100;

                    Byte[] bytes = new byte[buffersize];

                    long currentindex = 0;

                    int byteRead = 0;                    

                    while (rdr.Read())

                    {

                        byteRead = (int)rdr.GetBytes(2, currentindex, bytes, 0, buffersize);                 

                        while (byteRead != 0)

                        {

                             Response.BinaryWrite(bytes); 

                            currentindex += byteRead;

                            byteRead = (int)rdr.GetBytes(2, currentindex, bytes, 0, buffersize);

                        }

                    }

                    Response.End();

                }

            }

        }

    }



发表评论