Такая ситуация, я загоняю файл в базу данных
private void UploadFile()
{
int selectId = 0;
string filePath;
OpenFileDialog fileDialog = new OpenFileDialog();
if (fileDialog.ShowDialog() == DialogResult.OK)
{
filePath = fileDialog.FileName;
//Получаем имя файла
string fileName = filePath.Substring(filePath.LastIndexOf('\\') + 1);
//Получаем расширение файла
string fileExtension = filePath.Substring(filePath.LastIndexOf('.') + 1);
sendMessageTextBox.Text = fileName;
//Массив для хранения бинарных данных файла
byte[] binaryFile;
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
binaryFile = new byte[fs.Length];
fs.Read(binaryFile, 0, binaryFile.Length);
}
//Запрос на добавление сообщения в таблицу
int rowindex = usersDataGridView.CurrentCell.RowIndex;
selectId = Convert.ToInt32(usersDataGridView.Rows[rowindex].Cells[1].Value);
string querryAddMess = "insert into sta_Messages(\"SetUser_id\", \"GetUser_id\", \"File_Name\", \"File_Ext\", \"File_Content\", \"SetDate\")" + "values(" + Convert.ToInt32(loadData.LastId) + ", '" + selectId + "','" + fileName + "','" + fileExtension + "','" + binaryFile + "', " + "CAST(GETDATE() AS BINARY(8))" + ")";
using (SqlCommand cmdAddMess = new SqlCommand(querryAddMess, conn))
{
try
{
SqlDataReader rezultAddMess = cmdAddMess.ExecuteReader();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
GetData();
}
catch
{
MessageBox.Show("Ошибка!");
}
}
}
}
После добавления файла в базу данных, он также отображается в DataGridView. Как мне теперь открыть файл, который выбираю в гриде? Пробовал таким методом:
private void OpenFile()
{
var loadData = cs.LoadFile("DataConnection.xml");
string connString = String.Format("Data Source={0};Initial Catalog={1};User Id={2};Password={3}", loadData.Host, loadData.Database, loadData.UserId, loadData.PWD);
List<FileData> fileDatas = new List<FileData>();
using (SqlConnection conn = new SqlConnection(connString))
{
try
{
conn.Open();
int rowindex = postsDataGridView.CurrentCell.RowIndex;
int selectId = Convert.ToInt32(postsDataGridView.Rows[rowindex].Cells[0].Value);
string queryOpen = String.Format("select \"File_Name\", \"File_Ext\", \"File_Content\" from sta_Messages where \"id\" = {0}", selectId);
SqlCommand command = new SqlCommand(queryOpen, conn);
SqlDataReader reader = command.ExecuteReader();
//Получаем значения файла с БД
while (reader.Read())
{
string fileName = reader.GetString(0);
string fileExt = reader.GetString(1);
byte[] fileContent = (byte[])reader.GetValue(2);
FileData fileData = new FileData(fileName, fileExt, fileContent);
fileDatas.Add(fileData);
}
//Сохраняем файл на диск
if (fileDatas.Count > 0)
{
using (FileStream fs = new FileStream(fileDatas[0].FileName, FileMode.OpenOrCreate))
{
fs.Write(fileDatas[0].FileContent, 0, fileDatas[0].FileContent.Length);
Process.Start(fileDatas[0].FileName);
}
}
}
catch
{
MessageBox.Show("Ошибка!");
}
}
}
Выпадает ошибка "не удается найти данный файл", хотя на дебагере показывает, что вытягивает с базы все корректно.
Что неправильно делаю?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Помогите сделать задание, очень нужноВот условие: Задан текст, состоящий из произвольной последовательности буквенных символов
Пытаюсь создать файл на диске D:\NewFolder\imagejpg, система доходит до создания
Если этот метод будет выполняться в многопоточном режиме - не будет ли возникать исключение "Этот процесс занят другим процессом" ?
Столкнулся с вопросом использования условной конструкции или перехвата исключенияЧитал информацию, что "try {} catch() {}" потребляет больше ресурсов,...