我正在尝试将文件保存到SQL Server数据库中,该文件将保存在其中的列是datatype VARBINARY。
VARBINARY
我目前这样做的方式是通过获取文件路径并将文件转换为字节数组。
string SelectedFilePath = "" ; OpenFileDialog choofdlog = new OpenFileDialog(); if (choofdlog.ShowDialog() == DialogResult.OK) { SelectedFilePath = choofdlog.FileName; } byte[] Filebytes = File.ReadAllBytes(SelectedFilePath);
然后,我使用插入查询和convert函数将字节插入数据库,以将转换byte[]为varbinary:
byte[]
varbinary
INSERT * INTO TblFile([FILEID], [FILEDATA]) VALUES('" + Guid.newGuid + "', CONVERT(VARBINARY, '" + Filebytes + "'));
但是,在SQL Server数据库中,的值FILEDATA始终为
FILEDATA
0x53797374656D2E427974655B5D
而且,无论选择哪个文件,FILEDATA都始终是该数字。因此,如果您能告诉我为什么会这样,以及我应该采取什么措施来防止这种情况,我将非常感激。
这是一个错误:
截断在此处发生,您应该像这样将其强制转换为varbinary(MAX):
INSERT * INTO TblFile([FILEID], [FILEDATA]) VALUES('" + Guid.newGuid + "', CONVERT(VARBINARY(MAX), '" + Filebytes + "'));
此处描述了此行为:二进制和varbinary(Transact-SQL)
评论 在数据定义或变量声明语句 中未指定n时 ,默认长度为1。 在CAST函数中未指定n时,默认长度为30 。
评论
在数据定义或变量声明语句 中未指定n时 ,默认长度为1。 在CAST函数中未指定n时,默认长度为30 。
与其通过Query字符串传递数据,不如使用SQL参数,因为否则将传递’“ + Filebytes +”’。
SqlParameter FileDataUploadParameter = Cmd.Parameters.Add("@FileData", SqlDbType.VarBinary); FileDataUploadParameter.Value = FileToUpload;