我試圖存儲.xps
文件在SQL Server數據庫,但我得到的錯誤XPS文件太大而被存儲在數據庫
System.Data.SqlClient.SqlException:「字符串或二進制數據將被截斷。'
我知道這意味着我要存儲的數據量太大,而且我也試着序列化的文檔,它仍然過大(我的數據類型是varchar(MAX)
):
var xpsDocument = new XpsDocument(xpsFile, FileAccess.Read);
String toSave;
using (MemoryStream ms = new MemoryStream())
{
var writer = new XpsSerializerFactory().CreateSerializerWriter(ms);
writer.Write(xpsDocument.GetFixedDocumentSequence());
toSave = Convert.ToBase64String(ms.ToArray());
}
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into [table] values('" + filename + "', '" + toSave + "')";
cmd.ExecuteNonQuery();
con.Close();
filename
是隻是System.IO.Path.GetFileNameWithoutExtension(openFileDialog.FileName)
- 該列的數據類型是varchar(20)
,其長度肯定在該範圍內。
有沒有其他辦法可以進一步縮小字符串的大小?如果沒有,是否有不同的方式將xps文件存儲在數據庫中?
編輯基於MSD的回答是:
byte[] toSave;
using (MemoryStream ms = new MemoryStream())
{
var writer = new XpsSerializerFactory().CreateSerializerWriter(ms);
writer.Write(xpsDocument.GetFixedDocumentSequence());
toSave = ms.ToArray();
}
con.Open();
const String preparedCommand = "insert into [table] values(@FileName, @File, '', '', '', '')";
SqlCommand cmd = new SqlCommand(preparedCommand, con);
cmd.Parameters.Add("@File", SqlDbType.VarBinary).Value = toSave;
cmd.Parameters.Add("@FileName", SqlDbType.VarChar).Value = filename;
cmd.ExecuteNonQuery();
con.Close();
您的數據庫不支持BLOB嗎? – Marged