在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();
}
以下是我的代码:请求大家帮助解决!
这是从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();
}
解决方案 »
- string 后最[]代表什么意思
- C# 如何反序列化这个类 XmlDispatchReply.Deserialize
- C#中如何在JAVASCRIPT中调用C#函数,并传递参数
- 请教c#生成xml文档的格式 100分
- 我的物理数据库为什么没有添加一行
- 怎么样取得XML文件中两个标签之间的内容?
- .net类库里有没有方法让我知道dataset或者datatable占用了多少内存?
- 如何在WINFORM中利用C#判断当前应用程序的运行位置(安装位置)?
- 控件透明背景与容器背景不同步问题
- 给大家的圣诞礼物: FtpClient v3.0.4 beta发布
- 安装.net出错了!
- 请教C#更新EXCEL的问题
读出来的文件是否完整?