2014-01-10 2 views
0

При вставке файла doc в двоичном виде в базе данных. Я получаю строку ошибки или двоичных данных будет усечен ..Строковые или двоичные данные будут усечены asp.net

У меня есть веб-формы, как этот

<table> 
<tr> 
<td> 
    Select File 
    </td> 
    <td> 
    <asp:FileUpload ID="FileUpload1" runat="server" ToolTip="Select Only Word File" /> 
    </td> 
    <td> 
    <asp:Button ID="Button1" runat="server" Text="Upload" onclick="Button1_Click" /> 
    </td> 
    <td> 
     <asp:Button ID="Button2" runat="server" Text="View Files" 
      onclick="Button2_Click" /> 
    </td> 
    </tr> 

код позади При щелчке мышью по загрузке

protected void Button1_Click(object sender, EventArgs e) 
     { 
      Label2.Visible = true; 
      string filePath = FileUpload1.PostedFile.FileName; 
      string filename1 = Path.GetFileName(filePath); 
      string ext = Path.GetExtension(filename1); 
      string type = String.Empty; 

      if (!FileUpload1.HasFile) 
      { 
       Label2.Text = "Please Select File"; 
      } 
      else 
       if (FileUpload1.HasFile) 
       { 

        try 
        { 
         // Added by vithal wadje for Csharp-Corner contribution 

         switch (ext) 
         { 
          case ".doc": 

           type = "application/word"; 

           break; 

          case ".docx": 

           type = "application/word"; 

           break; 

         } 

         if (type != String.Empty) 
         { 
          connection(); 
          Stream fs = FileUpload1.PostedFile.InputStream; 
          BinaryReader br = new BinaryReader(fs); 
          Byte[] bytes = br.ReadBytes((Int32)fs.Length); 
          query = "insert into test(data)" + " values (@Data)"; 
          com = new SqlCommand(query, con); 
          com.Parameters.Add("@Data", SqlDbType.VarBinary).Value = bytes; 
          com.ExecuteNonQuery(); 
          Label2.ForeColor = System.Drawing.Color.Green; 
          Label2.Text = "Word File Uploaded successfully"; 

         } 
         else 
         { 
          Label2.ForeColor = System.Drawing.Color.Red; 

          Label2.Text = "Select Only word Files"; 


         } 
        } 
        catch (Exception ex) 
        { 
         Label2.Text = "Error: " + ex.Message.ToString(); 


        } 

       } 
     } 

В SQL Server у меня есть имя теста тестовой таблицы базы данных

data varbinary(Max) 

файла, который я отправляю есть данные byte[9886].

ответ

0

Эта проблема вызвана мы пытаемся вставить значения в столбце больше, чем максимальный размер столбца, указанный таким образом пытаемся использовать Максимальную DATATYPE

name Varchar(Max) 
type Varchar(Max) 
data VarBinary(Max) 

Проверьте другие колонки, которые вы вставляете во время этого процесса. Я бы особенно проверил колонку type, поскольку это будет что-то вроде image/jpeg, а не просто изображение или jpeg.

Вот list of possible content types, чтобы вы могли создать достаточно места в столбце ContentType соответственно.

+0

опции не присутствует в SQL-сервер для Binary (Макс), тогда как VARBINARY (Max) есть .. как Кани исправить это я уже назначая 'двоичным (8000)', который является не более value ... –

+0

use VARBINARY (max) –

+0

@Peter Henell использовал его, но не повезло, что такое же исключение подходит. –

0

Попробуйте установить размер/длину параметров SQL на фактическую длину байта.

com = new SqlCommand(query, con); 
com.Parameters.Add("@Data", SqlDbType.VarBinary, bytes.Length).Value = bytes; 
com.ExecuteNonQuery(); 

Или попробуйте установить длину параметра -1, так что она будет переведена на SQLClient, как VARBINARY (MAX):

com = new SqlCommand(query, con); 
com.Parameters.Add("@Data", SqlDbType.VarBinary, -1).Value = bytes; 
com.ExecuteNonQuery(); 
0

В то время как вы можете использовать VarBinary(MAX), чтобы решить вашу проблему, что увеличивает емкость до ~ 2 ГБ, это, вероятно, не идеальное решение.

Пока вы можете хранить большое количество двоичных данных в базе данных SQL, вы, вероятно, не должны. Вместо этого вы должны посмотреть только на сохранение ссылки на этот файл вместе с другими метаданными и просто сохранить этот файл на диске. Скорее всего, вам лучше использовать файловый сервер, чтобы избежать чрезмерного налогообложения вашего SQL-сервера.

В случае, если вы хотите хранить ваши файлы на SQL-сервере, взгляните на использование FBREWARAM (MAX), которое может хранить даже большие файлы и быстрее перемещать данные.

Больше информации здесь: http://technet.microsoft.com/en-us/library/bb933993(v=sql.105).aspx

Смежные вопросы