在SQLServer上我用image类型保存文件(将文件化为二进制),将SQLServer这数据读出来,再写在本地的ACCESS数据库的OLD对象里,再从ACCESS数据库里读出这些二进制信息写成文件的时候,就出现怪问题,所有写出来的文件的大小都是一样的!
以下是我的代码:请求大家帮助解决!
这是从SQLSERVER上写到ACCESS的代码!
DataSet ds = new DataSet();
byte[] data;
byte[] butt;
int n;
string connstr = "workstation id=MICHAEL;packet size=4096;user id=sa;data source=dbserver;persist security info=False;initial catalog=TSSystem";
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
string DirectoryPathstr = Environment.ExpandEnvironmentVariables("%ProgramFiles%") + "\\Techsino\\iMail\\iMailDB.mdb";
OleDbConnection t_conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DirectoryPathstr + ";");
t_conn.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = t_conn;
SqlDataAdapter adapter = new SqlDataAdapter("select * from MailAttTable where MailID = 2 order by AttSize",conn);
adapter.Fill(ds,"temp");
conn.Close();
FileStream fs;
for(n=0;n<ds.Tables[0].Rows.Count;n++)
{
    data = (byte[])ds.Tables[0].Rows[n]["Attach"];
    command.CommandText = "insert into reattch(MailID,AttName,[Size],[Type],AttContent)Values(" + int.Parse(ds.Tables[0].Rows[n]["MailID"].ToString()) + ",'" + ds.Tables[0].Rows[n]["AttName"].ToString() + "','" + ds.Tables[0].Rows[n]["AttSize"].ToString() + "','" + ds.Tables[0].Rows[n]["AttType"].ToString() + "',@att)";
command.Parameters.Add("@att",OleDbType.LongVarBinary,data.Length).Value = data;
if(t_conn.State == ConnectionState.Open)
{
command.ExecuteNonQuery();
t_conn.Close();
}
else
{
t_conn.Open();
command.ExecuteNonQuery();
t_conn.Close();
}
}//*********************************以下是从ACCESS里读取并写成文件**********************//
DataSet ds = new DataSet();
byte[] data;
string DirectoryPathstr = Environment.ExpandEnvironmentVariables("%ProgramFiles%") + "\\Techsino\\iMail\\iMailDB.mdb";
OleDbConnection t_conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DirectoryPathstr + ";");
t_conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from reattch where mailid = 2",t_conn);
adapter.Fill(ds,"temp");
t_conn.Close();
for(int n=0;n<ds.Tables[0].Rows.Count;n++)
{
data = (byte[])ds.Tables[0].Rows[n]["AttContent"];
FileStream fs = new FileStream("c:\\" + ds.Tables[0].Rows[n]["AttName"].ToString(),System.IO.FileMode.Create);
fs.Write(data,0,data.Length);
fs.Close();
}