我有這個代碼:
private void LoginBTN_Click(object sender, EventArgs e)
{
var loguser = AutorizeLoginBox.Text;
var passuser = AutorizePasswordBox.Text;
SqlDataAdapter adapter = new SqlDataAdapter();
DataTable table = new DataTable();
string querrystring = $"select ID, USERLOGIN, USERPASSWORD, USERAVATAR from USERTESTDB where USERLOGIN='{loguser}' and USERPASSWORD='{passuser}'";
SqlCommand command = new SqlCommand(querrystring, sqldb.getConnection());
adapter.SelectCommand = command;
adapter.Fill(table);
if (table.Rows.Count == 1)
{
byte[] arr;
Image imgcur;
ImageConverter converter = new ImageConverter();
arr = (byte[])converter.ConvertFromString(table.Rows[0].ToString(), );
MemoryStream ms = new MemoryStream(arr);
Image i = Image.FromStream(ms);
Program.programpg.avatarbox.Image = i;
}
}
登錄后如何將分配給該用戶的影像上傳到資料庫中。//symbolforfixdetails//symbolforfixdetails//symbolforfixdetails//symbolforfixdetails
這是資料庫的樣子:

此行中的錯誤:arr = (byte[])converter.ConvertFromString(table.Rows[0].ToString() );
錯誤:System.NotSupportedException:“ImageConverter 無法從 System.String 轉換。”
uj5u.com熱心網友回復:
請設定您Varbinary(Max)存盤影像位元組的 Db 列資料型別。
然后像你一樣將這個二進制檔案讀入 a MemoryStream(),但不進行轉換。
如果它是一個winforms專案,則應該在PictureBox's DataSource(或其他任何名稱。如果我記錯了它的名稱是Imageor BackgroundImage)中有一個多載,因為它直接接受byte陣列。
如果是 Winforms,您可以作為位元組陣列傳遞或轉換為Image物件并將其設定為資料源。
但是,如果它是一個 Web 專案,那么您可以將其設定為一個base64 data/png string或Image物件。
希望這可以幫助。
uj5u.com熱心網友回復:
嘗試以下代碼來設定PictureBox.Image存盤在MSSQL. 該代碼經過測驗并按預期作業。
第 1 部分:從資料庫中檢索影像并將其設定為PictureBox.Image:
DataTable table = new DataTable();
byte[] arr=null;
using (SqlConnection cn = new SqlConnection(cs))
{
cn.Open();
using (SqlDataAdapter ad = new SqlDataAdapter("select top 1 USERAVATAR from USERTESTDB", cn))//Replace sql qurey with yours
{
ad.Fill(table);
}
}
arr = (byte[])table.Rows[0][0];
//Replace it with [0][3] according to your posted query
System.Drawing.Bitmap bitmap = null;
ImageConverter converter = new ImageConverter();
System.Drawing.Image img =
(System.Drawing.Image)converter.ConvertFrom(arr);
bitmap = (System.Drawing.Bitmap)img;
pictureBox1.Image = bitmap;
第 2 部分:將影像存盤在資料庫中:
openFileDialog1.ShowDialog();
string path = openFileDialog1.FileName;
byte[] img = null;
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
img = br.ReadBytes((int)fs.Length);
using (SqlConnection cn = new SqlConnection(cs))
{
cn.Open();
using (SqlCommand cm = new SqlCommand("insert into USERTESTDB Values (@img)",cn))
{
cm.Parameters.Add(new SqlParameter("@img", img));
cm.ExecuteNonQuery();
}
}
您沒有詢問第 2 部分,但我將其包括在內以確保影像在資料庫中正確存盤(作為二進制資料)。
您的代碼行有兩個問題arr = byte[])converter.ConvertFromString(table.Rows[0].ToString());:
- 您使用
table.Rows[0](回傳整行)而不是table.Rows[0][x] x=index of image field. - 您不能
String以Image這種方式轉換,請查看問題3594239了解更多詳細資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/489374.html
上一篇:將主/從系結到主/從?
