Слияние документов из базы данных в один документ
У меня есть веб-приложение ,которое принимает файлы вложений (изображения и документы Word) в форматах, и каждый файл, сохраненный в базе данных, имеет приоритетный номер,
Мне нужен способ, который берет эти файлы из базы данных, упорядоченной по приоритету , а затем объединяет их в один файл ,пожалуйста, любая помощь, чтобы сделать это ?
Что я уже пробовал:
public void load() { connection.Open(); string strQuery2 = "select Data,Priority from Attcehments where CourseNum='" + course_number + "' and Semester='" + semester + "' ORDER BY Priority ASC;"; SqlCommand cmd = new SqlCommand(strQuery2, connection); cmd.ExecuteNonQuery(); DataTable dt = GetData(cmd); if (dt != null) { download(dt); } }
private DataTable GetData(SqlCommand cmd) { DataTable dt = new DataTable(); String strConnString = System.Configuration.ConfigurationManager .ConnectionStrings["connect"].ConnectionString; SqlConnection con = new SqlConnection(strConnString); SqlDataAdapter sda = new SqlDataAdapter(); cmd.CommandType = CommandType.Text; cmd.Connection = con; try { con.Open(); sda.SelectCommand = cmd; sda.Fill(dt); return dt; } catch { return null; } finally { con.Close(); sda.Dispose(); con.Dispose(); } }//data table private void download(DataTable dt) { string name = dt.Rows[0]["priority"].ToString(); Byte[] bytes = (Byte[])dt.Rows[0]["Data"]; // System.Text.UnicodeEncoding.UTF8.GetBytes(dt.Rows[0]["Data"].ToString()); using (FileStream fs = new FileStream(@"C:\\Users\\Rawan Mansour\\Desktop\\"+name+".docx", FileMode.Create,FileAccess.ReadWrite)) { fs.Write(bytes, 0, bytes.Length); fs.Close(); } MessageBox.Show("File saved successfully "); }
CHill60
Ваш код подвержен атаке SQL-инъекций. Никогда не объединяйте строки для формирования вашего SQL. Вместо этого используйте SqlParameters.
Rawan Mansourr
хорошо, спасибо, я так и сделаю
F-ES Sitecore
Как их объединить? Если я объединю три документа Word и 4 изображения, каков будет результат? Каков будет результат, если я объединю всего 5 изображений?
Rawan Mansourr
результатом будут документы word всех из них
Richard Deeming
Вы говорите, что это веб-приложение, но код, который вы разместили, не будет работать в веб-приложении.
Во-первых, вы не можете просто записать файл на диск и ожидать, что он появится в файловой системе клиента. Если бы вы могли, это было бы серьезной уязвимостью системы безопасности. Вместо этого вам нужно записать данные файла в Response
, а также соответствующие заголовки для описания типа контента и имени файла. Затем пользователь выбирает, хочет ли он сохранить файл и где его сохранить.
А во-вторых, MessageBox.Show
не собирается показывать сообщение пользователю. В лучшем случае он выдаст исключение, сообщающее вам, что процесс не является интерактивным. В худшем случае он будет отображать сообщение на сервере, где его никто никогда не увидит, и ваш код будет висеть, ожидая, когда кто-то войдет на сервер и отклонит сообщение.
Rawan Mansourr
спасибо за эти подсказки
Rawan Mansourr
что я могу использовать вместо messageBox. show, вы можете мне помочь?
Richard Deeming
Обычно вы регистрируете клиентский скрипт для вызова alert("Your message here...");
когда страница загружается.
Но вы не можете совместить это с загрузкой файла.
Rawan Mansourr
хорошо, а как насчет диалогового окна с да или нет?
Richard Deeming
Не совсем выполнимо. Javascript работает после ваш код позади закончил выполнение и вернул ответ клиенту. Код не может задать пользователю вопрос, а затем изменить свое поведение на основе ответа.
Rawan Mansourr
Но я не использую Java script , я использую Asp.net
Richard Deeming
Если вы хотите показать сообщение пользователю, то вы будете использовать Javascript. У тебя нет выбора.
Rawan Mansourr
Пожалуйста, еще один вопрос , Как я буду выполнять эту попытку поймать без окна сообщения, когда я использую скрипт, это просто перенаправление на страницу входа в систему без показа сообщения, что я должен делать?
пробовать
{
cookie = запрос.Cookies["Номер Курса"]. Value;
семестр = запрос.Cookies ["Семестр"]. Value;
Типа int32.Метод tryparse(печенье, из course_number);
}
ловить
{
Ящик для сообщений.Показать ("пожалуйста, сначала выберите курс и семестр с главной страницы!!");
Ответ.Перенаправление ("~/MainPage. aspx");
}
Richard Deeming
Передайте флаг в строке запроса: Скрыть скопировать код
Response.Redirect("~/MainPage.aspx?err=1");
Затем в
MainPage
, считайте флаг строки запроса и при необходимости выводите сообщение об ошибке.
Dave Kreskowiak
Вам придется создать новый документ Word с помощью OpenXML SDK. Для каждого элемента, который вы хотите поместить в документ, вам придется написать код, чтобы правильно поместить эти элементы в документ. Размещение в виде изображения будет отличаться от копирования содержимого с листа Excel, чтобы поместить его в него, что будет отличаться от копирования в него документа Word.
По сути, вы пишете код для поддержки всех типов вложений, которые вы хотите поддерживать, чтобы поместить их в этот один документ Word.