如何通过对话框将图像上传到 SQLite 数据库,并将图像输出到 XAML?
Posted
技术标签:
【中文标题】如何通过对话框将图像上传到 SQLite 数据库,并将图像输出到 XAML?【英文标题】:How do I upload images to the SQLite database, via a dialog box, and output the image to XAML? 【发布时间】:2021-12-24 14:19:48 【问题描述】: private void Button_Foto_Click(object sender, RoutedEventArgs e)
OpenFileDialog openFile = new OpenFileDialog();// создаем диалоговое окно
openFile.ShowDialog();// открываем окно
string FileName = openFile.FileName;// берем полный адрес картинки
imgPath = openFile.FileName; // записываем в переменную путь к изображению
textBoxImg.Text = FileName; // выводим в текстовом поле путь к изображению (для наглядности)
//InitVariable();
if (textBoxImg.Text == "") // если не указан путь к изображению, то...
return; // прекратить выполнение
// Конвертируем изображение в байты byte[]
byte[] _imageBytes = null;
FileInfo _imgInfo = new FileInfo(imgPath); // загрузим изображение
long _numBytes = _imgInfo.Length; // вычислим длину
FileStream _fileStream = new FileStream(imgPath, FileMode.Open, FileAccess.Read); // откроем изображение на чтение
BinaryReader _binReader = new BinaryReader(_fileStream);
_imageBytes = _binReader.ReadBytes((int)_numBytes); // изображение в байтах
imgFormat = Path.GetExtension(imgPath).Replace(".", "").ToLower(); // запишем в переменную расширение изображения в нижнем регистре, не забыв удалить (Replace) точку перед расширением
imgName = Path.GetFileName(openFile.FileName).Replace(Path.GetExtension(imgPath), ""); // запишем в переменную имя файла, не забыв удалить (Replace) расширение с точкой
// записываем информацию в базу данных
using (SQLiteConnection Connect = new SQLiteConnection("Data Source=" + dbPath + ";Version=3;"))
string commandText = "INSERT INTO " + db.AppStaffs + " ([image], [image_format], [image_name]) VALUES(@image, @format, @name)";
SQLiteCommand Command = new SQLiteCommand(commandText, Connect);
Command.Parameters.AddWithValue("@image", _imageBytes);
Command.Parameters.AddWithValue("@format", imgFormat);
Command.Parameters.AddWithValue("@name", imgName);
MessageBox.Show("Изображение добавлено в базу данных");
目前我正在使用代码将图像上传到数据库,但它没有加载,它通过单击按钮并从对话框中选择来加载,我选择,上传,给出一个消息,一切都是很好,是否可以在不拆分为数组的情况下保存图像,是否可以在不拆分为数组的情况下简化代码?使用单个变量输出和加载
【问题讨论】:
您创建了一个SQLiteCommand
,但从不执行它。此外,您为读取文件并将其存储在_imageBytes
中所做的一切都可以替换为_imageBytes = File.ReadAllBytes(imgPath);
【参考方案1】:
您没有使用executenonquery
方法。所以你写的查询将不起作用。完成工作后会显示该消息。
Command.ExecuteNonQuery();
使用此代码它将起作用。
编辑
我注意到了别的东西。 Connection
已创建,但 Open()
方法未执行。因此,即使您运行此方法也不起作用。
在创建Command
之前执行Open()
方法。将让您建立联系。
【讨论】:
我用这段代码,VS说“数据源不能为空。使用:memory:打开内存数据库” @EdwardKamalov 验证dbPath
是否设置为应有的值。
@EdwardKamalov 我在答案中添加了其他信息。看看这个。以上是关于如何通过对话框将图像上传到 SQLite 数据库,并将图像输出到 XAML?的主要内容,如果未能解决你的问题,请参考以下文章