如果上传txt文件则成功。但是上传大的txt文件然后发生错误。 错误是“字符串或二进制数据被截断”
protected void Button1_Click(object sender, EventArgs e)
{
FileUpload1.SaveAs(Server.MapPath("~\\upload\\") + FileUpload1.FileName);
f = Path.GetFileNameWithoutExtension(FileUpload1.FileName);
st = Path.GetFileName(FileUpload1.FileName);
ml = Server.MapPath("~\\upload\\");
nww = FileUpload1.FileName;
ty = Path.GetExtension(FileUpload1.FileName);
kk = ml + f + ty;
FileInfo fz = new FileInfo(kk);
long s1 = fz.Length;
string fsize = s1.ToString();
string dat = DateTime.Now.ToString();
FileStream fs = new FileStream(kk, FileMode.Open, FileAccess.ReadWrite);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
fs.Close();
con.Open();
SqlCommand cmd1 = new SqlCommand("insert into ofileup (Fid,filename,files,ftype,fsize,filepath,oname,status,date) values(@Fid,@filename,@files,@ftype,@fsize,@filepath,@oname,@status,@date)", con);
cmd1.Parameters.AddWithValue("@Fid", Label14.Text);
cmd1.Parameters.AddWithValue("@filename", st);
cmd1.Parameters.AddWithValue("@files", buffer);
cmd1.Parameters.AddWithValue("@ftype", ty);
cmd1.Parameters.AddWithValue("@fsize", fsize);
cmd1.Parameters.AddWithValue("@filepath", kk);
cmd1.Parameters.AddWithValue("@oname", Label16.Text);
cmd1.Parameters.AddWithValue("@status","waiting");
cmd1.Parameters.AddWithValue("@date", dat);
cmd1.ExecuteNonQuery();
con.Close();
Label17.Text = "File Uploaded Successfully...";
autoid();
}
在数据库中
答案 0 :(得分:1)
在数据库中,如果您要将文件存储在记录中,则需要将files
列更改为nvarchar(max)
(或ntext
以用于以前的SQL服务器工作)。但实际上,如果您要存储纯字节,使用varbinary
是您的最佳选择(除非它超过250k左右,然后使用FILESTREAM
设置,如果可以的话。)
基本上,您只能通过将files
限制为varchar(150)
来允许文件的字节大小为150个字符 - 总数。
错误消息是SQL服务器告诉您,您正在尝试将更多字符放入SQL列中而不是允许它 - 它用完了空间,如果它允许,数据将被截断/切断继续。相反,它错了。
简而言之,请将file
列的大小增加到varchar/nvarchar (max)
或varbinary(max)
,如果您打算存储文件,请考虑使用FILESTREAM
> 250K。