我的密码:
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循环下,但这只编码并插入了第一个位图三次。
1条答案
按热度按时间s71maibg1#
该命令只运行一次,要解决此问题,您需要将下面的行移动到循环中。
建议将
using
与SQLiteConnection
一起使用,并请使用参数化查询以避免SQL注入。正如@madreflection建议的那样,您只能在循环内部移动
cmd.ExecuteNonQuery();
,以避免一次又一次地打开/关闭连接。