Richard MacCutchan
Что должен делать этот код?
byte[] filedata = null; // filedata contains nothing
MemoryStream ms = new MemoryStream(); // a new empty memory stream
filedata = ms.GetBuffer(); // filedata still contains nothing
axAcroPDF1.src = LocalEncoding.GetString(ms.ToArray()); // no idea what this is supposed to do
// ...
querySaveStaff.Parameters.AddWithValue("@pdf_file", SqlDbType.VarBinary).Value = filedata;
// but you never add any content to filedata, so it adds 0x0 to the database.
Goran Bibic
Я решаю эту проблему и работаю...просто нужна помощь для извлечения из БД.
Сохранить вот так
частный недействительными методе button2_click(объект отправителя, EventArgs в е) //сохранение //сними
{
Диалоговое окно openfiledialog ОФД = новое диалоговое окно openfiledialog() { фильтр = "формат PDF|*.формат PDF" };//открыть файл PDF
if (ofd.ShowDialog() == DialogResult.ОК)
{
FileStream fs = файл.OpenRead(ofd.FileName);
MemoryStream ms = Новый Поток памяти();
axAcroPDF1.src = локальное кодирование.GetString(ms.Метод toArray());
ПС.Метод CopyTo(МС);
если (count_numberTextBox.Включено == правда)
{
если (строка.IsNullOrEmpty(idTextBox.Text))
{
using (SqlConnection openCon = new SqlConnection(cs))
{
строки saveStaff = "объявить @maxNo целое число = 0 выберите @maxNo = функция isnull(Max(число), 0) От на [dbo].[документы]; установить @maxNo=@maxNo+1; вставить в dbo.documents (number, count_number, label, partner, tax_number, date, file_location, pdf_file) значения (@maxNo,@count_number,@label,@partner,@tax_number,@date,@file_location,@pdf_file)";
используя (sqlcommand, который querySaveStaff = новая команда sqlcommand(saveStaff))
{
querySaveStaff.Соединение = openCon;
querySaveStaff.Parameters.Add("@count_number", SqlDbType.VarChar, 255).Value = count_numberTextBox.Text;
querySaveStaff.Parameters.Add("@label", SqlDbType.VarChar, 255).Value = labelTextBox.Text;
querySaveStaff.Parameters.Add("@partner", SqlDbType.VarChar, 255).Value = partnerComboBox.Текст;
querySaveStaff.Parameters.Add("@tax_number", SqlDbType.VarChar, 255).Value = tax_numberTextBox.Text;
querySaveStaff.Parameters.Add("@date", SqlDbType.Date).Value = dateDateTimePicker.Текст;
querySaveStaff.Parameters.Add("@file_location", SqlDbType.VarChar, 255).Value = file_locationTextBox.Text;
querySaveStaff.Parameters.AddWithValue ("@pdf_file", SqlDbType.VarBinary).Значение = МС.Метод toArray();
openCon.Открыть();
querySaveStaff.Метод executenonquery();
openCon.Закрывать();
dateDateTimePicker.Включен = ложь;
count_numberTextBox.Включен = ложь;
file_locationTextBox.Включен = ложь;
labelTextBox.Включен = ложь;
partnerComboBox.Включен = ложь;
tax_numberTextBox.Включен = ложь;
кнопки button3.Включен = ложь;
button4.Включен = ложь;
}
}
}
еще
{
using (SqlConnection openCon = new SqlConnection(cs))
{
строки saveStaff = "ДБО обновление.комплект документов count_number=@count_number, ярлык=@ярлык, партнер=@партнером, tax_number=@tax_number, дата=@дата, file_location=@file_location, pdf_file=@pdf_file где ID= " + idTextBox.Текст;
используя (sqlcommand, который querySaveStaff = новая команда sqlcommand(saveStaff))
{
querySaveStaff.Соединение = openCon;
querySaveStaff.Parameters.Add("@count_number", SqlDbType.VarChar, 255).Value = count_numberTextBox.Text;
querySaveStaff.Parameters.Add("@label", SqlDbType.VarChar, 255).Value = labelTextBox.Text;
querySaveStaff.Parameters.Add("@partner", SqlDbType.VarChar, 255).Value = partnerComboBox.Текст;
querySaveStaff.Parameters.Add("@tax_number", SqlDbType.VarChar, 255).Value = tax_numberTextBox.Text
Richard MacCutchan
FileStream fs = File.OpenRead(ofd.FileName);
MemoryStream ms = new MemoryStream();
axAcroPDF1.src = LocalEncoding.GetString(ms.ToArray());
fs.CopyTo(ms);
Я до сих пор не понимаю, о чем весь вышеприведенный код. Вам нужно только прочитать файл в массив байтов, чтобы получить его в базу данных. Затем, чтобы извлечь его, вы считываете запись базы данных в другой массив байтов и записываете ее в новый файл. Преобразование в строки и потоки памяти - это просто пустая трата времени и усилий.
Richard MacCutchan
Я также заметил, что у вас есть поле под названием file_location. Для чего это нужно? Если вы сохраняете расположение файла на диске и его содержимое, то одно из этих полей является избыточным.
Goran Bibic
Как получить данные из БД?
Я пытаюсь это сделать...но что-то не так...файл pdf
Другие значения текстового поля и поля со списком в порядке
частная DocumentsDataGridView_SelectionChanged недействительным(объект отправителя, EventArgs в электронной)
{
if (documentsDataGridView.Избранные воробьи.Count > 0)
{
string id = documentsDataGridView.SelectedRows[0].Ячейки["dataGridViewTextBoxColumn1"].значение.Метод toString();
номер строки = documentsDataGridView.SelectedRows[0].Ячейки["dataGridViewTextBoxColumn2"].значение.Метод toString();
строка count_number = documentsDataGridView.SelectedRows[0].Ячейки["dataGridViewTextBoxColumn3"].значение.Метод toString();
строка label = documentsDataGridView.SelectedRows[0].Ячейки["dataGridViewTextBoxColumn4"].значение.Метод toString();
строки партнер = documentsDataGridView.SelectedRows[0].Ячейки["dataGridViewTextBoxColumn5"].значение.Метод toString();
строка tax_number = documentsDataGridView.SelectedRows[0].Ячейки["dataGridViewTextBoxColumn6"].значение.Метод toString();
строка file_location = documentsDataGridView.SelectedRows[0].Ячейки["file_location"].Value.Метод toString();
idTextBox.Текст = id;
numberTextBox.Текст = число;
count_numberTextBox.Текст = count_number;
labelTextBox.Текстовая метка;
partnerComboBox.Текст = партнер;
tax_numberTextBox.Текст = tax_number;
dateDateTimePicker.Значение = Конвертировать.Объект todatetime(documentsDataGridView.SelectedRows[0].Ячейки["dataGridViewTextBoxColumn7"].значение);
file_locationTextBox.Текст = file_location;
пробовать
{
if (documentsDataGridView.SelectedRows[0].Ячейки["pdf_file"].Значение != null)
{
//FileStream fs = файл.OpenRead(ofd.FileName);
//MemoryStream ms = Новый Поток памяти();
//Ф.Метод CopyTo(МС);
//byte[] ap = (byte[])(documentsDataGridView.SelectedRows[0].Ячейки["pdf_file"].Ценность);
//MemoryStream ms = новый MemoryStream(ap);
//axAcroPDF1.src = локальное кодирование.GetString(ms.Метод toArray());
//axAcroPDF1.LoadFile(ms);
// //// управления PictureBox.Image = ConvertBinaryToImage(list[listView.Сфокусированный взгляд.индексные данные);
// byte[] ap = (byte[])(documentsDataGridView.SelectedRows[0].Ячейки["pdf_file"].Ценность);
// MemoryStream ms = новый MemoryStream(ap);
// ms.Position = 0;
// Файл.WriteAllBytes(@"C:\PDFs.pdf", Мисс Тоаррей());
// //Процесс.Старт(@"C:\PDFs.pdf");
// axAcroPDF1.LoadFile(@"C:\PDFs.pdf");
// axAcroPDF1.Включен = истина;
// SqlConnection connection = новый SqlConnection(cs);
// соединение.Открыть();
// SqlCommand command = new
// SqlCommand("select pdf_file from documents where id=" + idTextBox.Text, connection);
// byte[] buffer = (byte[])команда.Executescalar так();
// соединение.Закрывать();
// FileStream fs = новый FileStream(@"C:\PDFs\test.pdf", FileMode.Создавать);
// //fs.Write(buffer, 0, buffer.Длина);
// //fs.Close();
//axAcroPDF1.LoadFile(@"C:\PDFs\test.pdf");
//axAcroPDF1.Включен = истина;
}
еще
{
axAcroPDF1.в src = нуль;
}
}
ловить
{
axAcroPDF1.в src = нуль;
}
//Функция sqlconnect