C# 错误是;“字符串或二进制数据被截断”;

C# 错误是;“字符串或二进制数据被截断”;,c#,sql-server,C#,Sql Server,如果上传了txt文件,则成功。但如果上传了较大的txt文件,则会发生错误错误为“字符串或二进制数据被截断” 在数据库中 Fid int 文件名varchar(250) 文件varchar(150) F类型varchar(150) fsize bigint 文件路径varchar(150) 奥纳姆·瓦尔查尔(50) 状态varchar(50) 日期varchar(50) 在数据库中,如果要在记录中存储文件,则需要将文件列更改为nvarchar(max)(对于以前的SQL Server,或ntex

如果上传了txt文件,则成功。但如果上传了较大的txt文件,则会发生错误错误为“字符串或二进制数据被截断”

在数据库中

  • Fid int
  • 文件名varchar(250)
  • 文件varchar(150)
  • F类型varchar(150)
  • fsize bigint
  • 文件路径varchar(150)
  • 奥纳姆·瓦尔查尔(50)
  • 状态varchar(50)
  • 日期varchar(50)

在数据库中,如果要在记录中存储文件,则需要将
文件
列更改为
nvarchar(max)
(对于以前的SQL Server,或
ntext
,两者都可以使用)。但实际上,如果您存储的是纯字节,那么使用
varbinary
是最佳选择(除非超过250k左右,如果可以的话,请使用
FILESTREAM
setup)

基本上,通过将
文件
限制为
varchar(150)
,只允许文件的字节大小为150个字符

错误消息是SQL server告诉您,您试图在SQL列中输入的字符数超出了允许的范围-它已用完空间,如果继续,数据将被截断/截断。相反,它会出错


简短地说,增加你的<代码>文件> <代码>列,对<代码> vARAR/NVARCHAR(MAX)或<代码> VARDION(MAX)并考虑使用<代码> FielestRAM<<代码> >如果你计划存储文件> 250K。

使用得好,你的<代码>文件>代码>字段称它只能处理150个字符,但是你用一个文件的内容填充它,这个文件大概比这个大。(您也没有非常清晰地读取它,并且将其作为二进制数据读取,尽管字段是文本字段,但这些是独立的问题。)当您的模式不允许时,您希望数据库如何处理大型文件?尽管此问题与数据库相关。下面是一些支持.net应用程序允许大文件上载的要点<代码>只需在web.config的
部分下设置即可。在本例中,我将最大长度设置为2GB。请注意,
maxRequestLength
以KB为单位设置,可以设置为
2GB
(2079152 KB)。但默认文件大小限制为(
4M
B)。如果(e.CommandName==“Select”){int x=Convert.ToInt32(e.CommandArgument);GridViewRow row=GridView1.Rows[x];string fid=row.Cells[0]。Text;con.Open();SqlCommand com=new SqlCommand(“从ofileup中选择oname、files、filename,其中Fid=@Fid”,con);com.Parameters.AddWithValue(“@Fid”,Fid);SqlDataReader dr=com.ExecuteReader();if(dr.Read()){Response.Clear();Response.Buffer=true;//Response.ContentType=dr[“ftype”].ToString();Response.AddHeader(“内容处置”、“文件;文件名=“+dr[“filename”]”.ToString());//打开文件提示框或保存文件Response.Charset=“”;Response.Cache.SetCacheability(HttpCacheability.NoCache);Response.BinaryWrite((字节[])dr[“文件”]);Response.End();}con.Close();}在上述代码Response.BinaryWrite((字节[])dr[“文件”])中;是show error。该错误无法将system.string强制转换为system.Binary这几乎是不可能读取的--但通过查看您收到的错误,您似乎正在将响应的内容类型设置为字符串变量(如CSV?),并尝试对其进行.BinaryWrite。请看这里:还可以搜索“如何在C#“中从数据库流式传输文件-您将获得一百万次点击率(给予或接受5次)。
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();
    }