foreach循环不会编码所有位图并将其插入sqlite DB

g52tjvyc  于 2022-12-23  发布在  SQLite
关注(0)|答案(1)|浏览(120)

我的密码:

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);
            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 + "')";
             
            }
            connection.Open();
            cmd.ExecuteNonQuery();
            connection.Close();
}

只有第一个位图被编码并插入数据库。
我的目的是对PictureBoxexBitmaps数组中的所有位图进行编码,然后将它们插入数据库。
我尝试将connection.Open();cmd.ExecuteNonQuery();connection.Close();放在foreach循环下,但这只编码并插入了第一个位图三次。

s71maibg

s71maibg1#

该命令只运行一次,要解决此问题,您需要将下面的行移动到循环中。

connection.Open();
cmd.ExecuteNonQuery();
connection.Close();

建议将usingSQLiteConnection一起使用,并请使用参数化查询以避免SQL注入。

    • 编辑:**

正如@madreflection建议的那样,您只能在循环内部移动cmd.ExecuteNonQuery();,以避免一次又一次地打开/关闭连接。

相关问题