错误是"截断的字符串或二进制数据"

时间:2015-01-08 10:43:00

标签: c# sql-server

如果上传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();
    }

在数据库中

  • Fid int
  • filename varchar(250)
  • files varchar(150)
  • ftype varchar(150)
  • fsize bigint
  • filepath varchar(150)
  • oname varchar(50)
  • status varchar(50)
  • date varchar(50)

1 个答案:

答案 0 :(得分:1)

在数据库中,如果您要将文件存储在记录中,则需要将files列更改为nvarchar(max)(或ntext以用于以前的SQL服务器工作)。但实际上,如果您要存储纯字节,使用varbinary是您的最佳选择(除非它超过250k左右,然后使用FILESTREAM设置,如果可以的话。)

基本上,您只能通过将files限制为varchar(150)来允许文件的字节大小为150个字符 - 总数。

错误消息是SQL服务器告诉您,您正在尝试将更多字符放入SQL列中而不是允许它 - 它用完了空间,如果它允许,数据将被截断/切断继续。相反,它错了。

简而言之,请将file列的大小增加到varchar/nvarchar (max)varbinary(max),如果您打算存储文件,请考虑使用FILESTREAM> 250K。