你好,
我正在努力
1.
byte[] bytes = System.IO.File.ReadAllBytes(@"C:\Users\user\Docs\1.pdf");
2.
AccessConnector.WriteByteArrayToID(122, bytes);
public static void WriteByteArrayToID(int aID, byte[] aFile)
{
conn.Open();
dbCommand = new OleDbCommand("UPDATE Belege SET Datei = @file WHERE(ID = @ID)", conn);
dbCommand.Parameters.Add("@ID", OleDbType.Integer).Value = aID;
dbCommand.Parameters.Add("@file", OleDbType.VarBinary).Value = aFile.ToString();
dbDataAdapter = new OleDbDataAdapter(dbCommand);
dbCommand.ExecuteNonQuery();
conn.Close();
}
3.
DataTable table = AccessConnector.GetFileByteArrayByID(122);
DataRow row = table.Rows[0];
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
byte[] newbytes = enc.GetBytes(row.ItemArray[0].ToString());
4.
System.IO.File.WriteAllBytes(@"C:\Users\user\Documents\Docs\a.pdf", newbytes);
问题是, newbytes 比字节小得多,并且新文件不可访问。在 Access DB 单元格中,就像中文字母一样。我已经尝试使用其他编码。没有什么。任何人都可以解释为什么它小得多(23000 个字符到 400 个字符)。谢谢。
更新为其他功能添加了代码
public static DataTable GetFileByteArrayByID(int aID)
{
conn.Open();
dbCommand = new OleDbCommand("SELECT Datei FROM Belege WHERE (ID = @ID)", conn);
dbCommand.Parameters.Add("@ID", OleDbType.Integer).Value = aID;
dbDataAdapter = new OleDbDataAdapter(dbCommand);
DataTable resultDataTable = new DataTable();
dbDataAdapter.Fill(resultDataTable);
conn.Close();
return resultDataTable;
}
解决方案
public static void WriteByteArrayToID(int aID, byte[] aFile)
{
conn.Open();
dbCommand = new OleDbCommand("UPDATE Belege SET Datei = @file WHERE(ID = @ID)", conn);
string tmp = Convert.ToBase64String(aFile);
dbCommand.Parameters.Add("@file", OleDbType.VarChar).Value = tmp;
dbCommand.Parameters.Add("@ID", OleDbType.Integer).Value = aID;
dbDataAdapter = new OleDbDataAdapter(dbCommand);
dbCommand.ExecuteNonQuery();
conn.Close();
}
public static DataTable GetFileByteArrayByID(int aID)
{
conn.Open();
dbCommand = new OleDbCommand("SELECT Datei FROM Belege WHERE (ID = @ID)", conn);
dbCommand.Parameters.Add("@ID", OleDbType.Integer).Value = aID;
dbDataAdapter = new OleDbDataAdapter(dbCommand);
DataTable resultDataTable = new DataTable();
dbDataAdapter.Fill(resultDataTable);
conn.Close();
return resultDataTable;
}
//-----------------------------------------------------------------------------------------------------------------
byte[] bytes = System.IO.File.ReadAllBytes(@"C:\Users\user\Music\1.pdf");
AccessConnector.WriteByteArrayToID(122, bytes);
DataTable table = AccessConnector.GetFileByteArrayByID(122);
string file = table.Rows[0][0] as string;
System.IO.File.WriteAllBytes(@"C:\Users\user\Documents\Dokumente\a.pdf", Convert.FromBase64String(file));
//-----------------------------------------------------------------------------------------------------------------
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句