SujataJK Ответов: 2

Почему это-строковые или двоичные данные будут усечены. Оператор был прерван , произошла ошибка


Всем привет,
Я-Суджата.Я собираюсь разработать веб-приложение в том, что хочу сохранить pdf, doc/docs, xls/xlsx и файл изображения в sql server 2008.когда я собираюсь Сохранить Pdf файл, то он дает выше exeption

Что я уже пробовал:

Ниже приведен мой пример кода..


1) Страница дизайна
<asp:FileUpload ID="FileUpload1" runat="server" />
  <asp:Button ID="btnUpload" runat="server" Text="Upload"
      onclick="btnUpload_Click" />


  <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

  <asp:Label ID="Label2" runat="server" Text="Enter id"></asp:Label>

  <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="btnRetrive" runat="server" Text="Retrive" Height="31px"
      onclick="btnRetrive_Click" style="margin-top: 80px" />
  <asp:Button ID="btnUpload0" runat="server" Text="PDFUpload"
      Height="21px"
      style="margin-top: 64px; margin-bottom: 33px" onclick="btnUpload0_Click" />




2). операция на btnUload_click
protected void btnUpload_Click(object sender, EventArgs e)
        {
            string filepath = FileUpload1.PostedFile.FileName;
            string fileName = Path.GetFileName(filepath);
            string ext = Path.GetExtension(fileName);
            string contentType = string.Empty;

            switch (ext)
            {
                case ".doc":
                    contentType = "application/vnd.ms-word";
                    break;
                case ".docx":
                    contentType = "application/vnd.ms-word";
                    break;
                case ".xls":
                    contentType = "application/vnd.ms-excel";
                    break;
                case ".xlsx":
                    contentType = "application/vnd.ms-excel";
                    break;
                case ".jpg":
                    contentType = "image/jpg";
                    break;
                case ".png":
                    contentType = "image/png";
                    break;
                case ".gif":
                    contentType = "image/gif";
                    break;
                case ".pdf":
                    contentType = "application/pdf";
                    break;

            }


            if (contentType != string.Empty)
            {
                string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
                string contenttype = FileUpload1.PostedFile.ContentType;
                using (Stream fs = FileUpload1.PostedFile.InputStream)
                {
                    using (BinaryReader br = new BinaryReader(fs))
                    {
                        byte[] bytes = br.ReadBytes((Int32)fs.Length);
                        //string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
                        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString)) ;
                        {
                            string query = "insert into ImageTable values (@Name, @ContentType, @Data)";
                            using (SqlCommand cmd = new SqlCommand(query))
                            {
                                cmd.Connection = con;

                                cmd.Parameters.AddWithValue("@Name", filename);
                                cmd.Parameters.AddWithValue("@ContentType", contenttype);
                                cmd.Parameters.Add("@Data", SqlDbType.VarBinary).Value=bytes;
                                con.Open();
                                cmd.ExecuteNonQuery();
                              //  con.Close();
                            }
                        }
                    }
                    Label1.Text = "Upload Succesfully";
                    con.Close();
                }
            }
        }


когда я собираюсь сохранить изображение, doc-файл работает правильно,но когда я собираюсь Сохранить pdf-файл, некоторые pdf-файлы сохраняются успешно, а некоторые вызывают следующее исключение


String or binary data would be truncated.
The statement has been terminated.</pre>
Please help me to solve this exception

2 Ответов

Рейтинг:
12

Richard MacCutchan

Вы должны использовать тип данных Blob, как это было предложено на сайте Тип Данных Varbinary[^].


SujataJK

спасибо, Ричард.
но я не могу найти тип данных BLOB в sql server 2008 R2

Richard MacCutchan

Ну, похоже, что varbinary (max) должен делать эту работу, понимаете Работа с большими двоичными объектами (Blob), используя SQL Server и ADO.NET - Developer.com[^Поэтому вам нужно провести дальнейшее расследование того, почему вы получаете эту ошибку.

Richard MacCutchan

Вам также может потребоваться указать размер данных, как показано на рисунке Коллекции sqlparametercollection.Добавить Метод (String, SqlDbType, Int32) (System. Data.SqlClient)[^].

SujataJK

@Ричард

сэр мне это понравилось,
УМК.Параметры.Добавить ("Сведения@", Значения Sqldbtype.Типа varbinary,8000).Значение=байт;

но все равно это не работает

Richard MacCutchan

Почему вы используете 8000 в качестве длины файла?

SujataJK

но сэр,
в моем случае varbinary (MAX) работает для какого-то pdf-файла, например
Новый Документ 10.PDF-файл - приложение/формат PDF
Контрольный список опалубки. pdf-приложение/pdf
RFI. pdf-приложение/pdf
PBILLJG0050715-16. pdf-приложение/pdf
PBILLJG0051315-16. pdf-приложение/pdf

а для какого-то pdf-файла он не работает.
Есть ли какие-либо проблемы с версией?

Richard MacCutchan

Затем вам нужно выполнить некоторую отладку, чтобы выяснить, чем отличаются файлы, которые выходят из строя.

SujataJK

да уж,
Я решил проблему.
спасибо @Richard и F-ES Sitecore

Richard MacCutchan

Затем, пожалуйста, опубликуйте детали, чтобы другие люди могли найти решение.

Рейтинг:
0

F-ES Sitecore

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

типы-SQL Server: как хранить двоичные данные (например, файл Word)? - переполнение стека[^]


SujataJK

спасибо за быстрый ответ.
Здесь у меня есть 4 колонки для моего ImageTable as
id int не nill,
Имя varchar(25)null,
ContentType varchar(25)null,
и
Данные varBinary(макс.)