My code:
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();
}
Only the first bitmap is encoded and inserted into the database.
My intention is to encode all bitmaps present in the PictureBoxexBitmaps
array then insert them into the database.
I tried putting connection.Open();
cmd.ExecuteNonQuery();
and connection.Close();
under the foreach loop but that only encoded and inserted the first bitmap three times.
The command is being run only once, To fix the issue you need to move the below line inside the loop.
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
and as a suggestion use using
with the SQLiteConnection
and please use the parameterized query to avoid SQL injection.
Edit:
As @madreflection suggested you could only move the cmd.ExecuteNonQuery();
inside the loop to avoid opening/closing the connection again and again. Thank you