如何通过对话框将图像上传到 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何以BLOB格式将图像上传到Firebase存储?

如何通过将地图切片图像保存到 sqlite 数据库来使用 osmdroid 实现离线地图?

上传图片到apk

如何使用 SQLite 和 PHP 将图像保存到数据库?

如何将图像保存在数据库中并从数据库上传到服务器? [关闭]

如何将图像存储在 SQLite 数据库中