sqlite 解码的位图图像未正确设置在照片框中

euoag5mw  于 2022-12-23  发布在  SQLite
关注(0)|答案(1)|浏览(134)
private void BTN_Save_Click(object sender, EventArgs e)
        {
            string DBpath = @"Data Source=.\StudentDB.db;Version=3;";
            Bitmap[] PictureBoxesBitmaps = {FirstPictureBitmap, SecondPictureBitmap, ThirdPictureBitmap };
            using SQLiteConnection connection = new(DBpath);
            using SQLiteCommand cmd = new(DBpath, connection);
            connection.Open();
            cmd.CommandText = @"DELETE FROM PictureBoxes";
            cmd.ExecuteNonQuery();
            foreach (Bitmap bitmap in PictureBoxesBitmaps)
            {
                System.IO.MemoryStream ms = new();
                bitmap?.Save(ms, ImageFormat.Png);
                byte[] BitmapByteArray = ms.ToArray();
                var PictureBox64 = Convert.ToBase64String(BitmapByteArray);
                cmd.CommandText = @"INSERT INTO PictureBoxes(Encoded) VALUES('" + PictureBox64 + "')";
                cmd.ExecuteNonQuery();
            }
            connection.Close();
        }

我使用第一段代码将三个位图图像编码为base64字符串,然后将它们存储在SQLite数据库中。

public Form1()
        {
            InitializeComponent();
            RefreshData();
            using SQLiteConnection PicCheckerConnection = new(DBpath);
            using var cmd = new SQLiteCommand(DBpath, PicCheckerConnection);
            PicCheckerConnection.Open();
            for (int i = 0; i <= 4; i++)
            {
                cmd.CommandText = "SELECT * FROM (PictureBoxes) Limit "+ i +"," + i;
                cmd.ExecuteNonQuery();
                using (SQLiteDataReader read = cmd.ExecuteReader())
                {
                    while (read.Read())
                     {
                        string Base64Image = read.GetString(0);
                        byte[] bytes = Convert.FromBase64String(Base64Image);
                        Stream stream = new MemoryStream(bytes);
                        if (i == 1) { pictureBox1.Image = Image.FromStream(stream);}
                        if (i == 2) { pictureBox2.Image = Image.FromStream(stream);}
                        if (i == 3) { pictureBox3.Image = Image.FromStream(stream);}
                     }
                    read.Close(); 
                }
            }

然后我写了这段代码,它从SQLite数据库中选择所有三个base64字符串,解码它们,然后把它们分别放到图片框中,第一个base64字符串--〉第一个图片框,第二个base64字符串--〉第二个图片框,第三个base64字符串--〉第三个图片框。
然而,当程序解码base64字符串并将图像应用于图片框时,顺序被打乱,第二解码图像被设置在第一图片框中,第三解码图像被设置在第二图片框中,而第一解码图像没有被设置在任何图片框中。
我试过调试和更改i的值,但遗憾的是它们没有帮助。

uubf1zoe

uubf1zoe1#

向表中添加一个用于对图像进行排序的列以存储图像,并使用order by子句对图像进行排序。

相关问题