MadGoat's Blog

导航

新老平台转换数据导入总结

新老平台转换数据导入总结

移动公司使用的一个老的内部发布平台,欲更新为新平台,而老平台的内容,要全部转换到新平台上。

文章数据的导入主要就是SQL语句INSERT搞定。不同的字段对应一下而已。
但问题出在老平台的附件数据,为二进制保存在数据库中。
新的发布平台,附件为正常文件。

附件数量不是太多,一千多,但手工的话,也够忙的。
我是懒人,写了一个小程序,从老的库中读取二进制数据,写入新的平台保存文件的目录。
并在新平台的库中,INSERT一条数据。
主要代码如下:
//从数据库读取并写入文件
//参考网上代码写的第一个,但后来发现执行效率奇低。失败!
while (dr.Read())

    fs 
= new FileStream(filename,FileMode.CreateNew);
    bw 
= new BinaryWriter(fs);
    startIndex 
= 0;
    retval 
= dr.GetBytes(2, startIndex, outbyte, 0, bufferSize);
   
while (retval == bufferSize)
    {
      bw.Write(outbyte);
      bw.Flush();
     
startIndex += bufferSize;
      retval 
= dr.GetBytes(2, startIndex, outbyte, 0, bufferSize);
     }
    
bw.Write(outbyte, 0, (int)retval - 1);
     bw.Flush();

//修改后的代码,OK
while (dr.Read())
{
 byte[] tmp;
 tmp
=(byte[])dr["ENCLS"];                   
 bw.Write(tmp);
}

//将C:\test.rmvb写入库中,测试效率时使用的大文件
private void button2_Click(object sender, System.EventArgs e)
        {
            SqlConnection con 
= new SqlConnection("Server=(local);uid=sa;pwd=;database=netserver");
            SqlDataAdapter da 
= new SqlDataAdapter("Select * From dbo.Document_appendix",con);
            SqlCommandBuilder MyCB 
= new SqlCommandBuilder(da);
            DataSet ds 
= new DataSet("MyImages");
            da.MissingSchemaAction 
= MissingSchemaAction.AddWithKey;
            FileStream fs 
= new FileStream(@"C:\test.rmvb", FileMode.OpenOrCreate, FileAccess.Read);
            
byte[] MyData= new byte[fs.Length];
            fs.Read(MyData, 
0, System.Convert.ToInt32(fs.Length));
            fs.Close();
            da.Fill(ds,
"MyImages");
            DataRow myRow;
            myRow
=ds.Tables["MyImages"].NewRow();
            myRow[
"filename"= "test.rmvb";
            myRow[
"ENCLS"= MyData;
            ds.Tables[
"MyImages"].Rows.Add(myRow);
            da.Update(ds, 
"MyImages");
            con.Close();
            MessageBox.Show(
"Done!Congratulation!");       
        }


posted on 2006-09-08 12:03  MadGoat  阅读(432)  评论(0编辑  收藏  举报