none
如何把一个文件分段写入数据库的Image字段? RRS feed

  • 问题

  • 如何把一个文件分段写入数据库的Image字段?
    以下是我没有分段,整到先读到Bytes中的代码:
    //................
            SqlConnection cn=new SqlConnection(cnString.cnStr());
            if(cn.State==ConnectionState.Closed) cn.Open();
            FileInfo fi=new FileInfo(filename);
                    long a = fi.Length;
                    long b = 1024L;
                    long tLength = a / b;
                    int filesize=(Int32)tLength;
            FileStream fs=fi.OpenRead();
            byte[] bytes=new byte[fs.Length+999];
            fs.Read(bytes,0,Convert.ToInt32(fs.Length));
                  
                    SqlCommand cmd = new SqlCommand("savefiles", cn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter pa = new SqlParameter("@name", SqlDbType.NVarChar);
                    pa.Value = textBox1.Text.Trim();//FileName
                    cmd.Parameters.Add(pa);
                    SqlParameter pb = new SqlParameter("@files", SqlDbType.Image);
                    //这就是要存储文件的Image,如果这个Bytes比较大如300-400M的话,运行就占用了大量的内存
                    //如果我能把文件分段,并分段存到数据库的Image字段就好?有解决办法吗?
                    pb.Value = bytes;
                    cmd.Parameters.Add(pb);              
                  
                    cmd.ExecuteNonQuery();          
                                  
                    fs.Dispose();               
                    cn.Dispose();
    //...........


    2009年12月22日 10:21

全部回复

  • 你创造数组太多了把?
    2009年12月22日 11:20
  • 那些都是必须的数组呀, 有更好的方法吗??

    //................
            SqlConnection cn=new SqlConnection(cnString.cnStr());
            if(cn.State==ConnectionState.Closed) cn.Open();
            FileInfo fi=new FileInfo(filename);               
            FileStream fs=fi.OpenRead();
            byte[] bytes=new byte[fs.Length+999];
            fs.Read(bytes,0,Convert.ToInt32(fs.Length));
                 
                    SqlCommand cmd = new SqlCommand("savefiles", cn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter pa = new SqlParameter("@name", SqlDbType.NVarChar);
                    pa.Value = textBox1.Text.Trim();//FileName
                    cmd.Parameters.Add(pa);
                    SqlParameter pb = new SqlParameter("@files", SqlDbType.Image);
                    //这就是要存储文件的Image,如果这个Bytes比较大如300-400M的话,运行就占用了大量的内存
                    //如果我能把文件分段,并分段存到数据库的Image字段就好?有解决办法吗?
                    pb.Value = bytes;
                    cmd.Parameters.Add(pb);             
                 
                    cmd.ExecuteNonQuery();         
                                 
                    fs.Dispose();              
                    cn.Dispose();
    //...........

    2009年12月22日 15:47
  • 把文件保存到服务器的文件系统,然后在数据库存放文件路径。这样比较好吧


    Mog Liang
    2009年12月23日 6:56
  • 把文件保存到服务器的文件系统,然后在数据库存放文件路径。这样比较好吧


    Mog Liang


    保存到文件系统也要分段读入呀....难道数据库字段不接受分段的流, 非要整个接收吗/???
    2009年12月24日 6:38