新老平台转换数据导入总结
新老平台转换数据导入总结
移动公司使用的一个老的内部发布平台,欲更新为新平台,而老平台的内容,要全部转换到新平台上。
文章数据的导入主要就是SQL语句INSERT搞定。不同的字段对应一下而已。
但问题出在老平台的附件数据,为二进制保存在数据库中。
新的发布平台,附件为正常文件。
附件数量不是太多,一千多,但手工的话,也够忙的。
我是懒人,写了一个小程序,从老的库中读取二进制数据,写入新的平台保存文件的目录。
并在新平台的库中,INSERT一条数据。
主要代码如下:
移动公司使用的一个老的内部发布平台,欲更新为新平台,而老平台的内容,要全部转换到新平台上。
文章数据的导入主要就是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!");
}
//参考网上代码写的第一个,但后来发现执行效率奇低。失败!
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!");
}