[英]C# WPF Retrieve Image from SQL Server database, byte to image
因此,我有这些代码,这些代码将为我提供用户信息。
注意 :注释行是我已经尝试过的东西。
码:
public UserInfo GetUserCredentials(string usernameParameter, string passwordParameter)
{
UserInfo getInfo = new UserInfo();
try
{
accessToDatabase.OpeningDatabase();
String query = "SELECT * FROM Users where Username=@Username AND Password=@Password";
SqlCommand sqlCmd = accessToDatabase.Command(query);
sqlCmd.CommandType = CommandType.Text;
sqlCmd.Parameters.AddWithValue("@Username", usernameParameter);
sqlCmd.Parameters.AddWithValue("@Password", passwordParameter);
SqlDataReader oReader = sqlCmd.ExecuteReader();
byte[] pictureIdByte;
Image pictureIdImg = null;
while (oReader.Read())
{
getInfo.Username = oReader["Username"].ToString();
getInfo.Password = oReader["Password"].ToString();
getInfo.Role = oReader["Role"].ToString();
getInfo.Firstname = oReader["Firstname"].ToString();
getInfo.Lastname = oReader["Lastname"].ToString();
getInfo.Status = Convert.ToInt32(oReader["Status"]);
getInfo.Gender = oReader["Gender"].ToString();
getInfo.Birthday = oReader["Birthday"].ToString();
getInfo.Email = oReader["Email"].ToString();
getInfo.Address = oReader["Address"].ToString();
getInfo.City = oReader["City"].ToString();
getInfo.Country = oReader["Country"].ToString();
getInfo.Mobilenumber = oReader["Mobile"].ToString();
pictureIdByte = (byte[])(oReader["PictureID"]);
if (pictureIdByte == null)
{
getInfo.PictureID = pictureIdImg;
}
else
{
//MemoryStream stream = new MemoryStream(pictureIdByte);
//getInfo.PictureID.Source = BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
//var pictureIdVar = new BitmapImage();
//using (var memStream = new MemoryStream(pictureIdByte))
//{
// memStream.Position = 0;
// pictureIdVar.BeginInit();
// pictureIdVar.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
// pictureIdVar.CacheOption = BitmapCacheOption.OnLoad;
// pictureIdVar.UriSource = null;
// pictureIdVar.StreamSource = memStream;
// pictureIdVar.EndInit();
//}
//pictureIdVar.Freeze();
//getInfo.PictureID.Source = pictureIdVar;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
accessToDatabase.ClosingDataBase();
}
return getInfo;
}
我在这个主窗口中有一个图像,该图像是我从xaml设计中拖放下来的。 然后使用后面的代码,我试图像这样设置源,但是每当我尝试登录时,它都会给我一个错误:
System.NullReferenceException:'对象引用未设置为对象的实例。
MyThesisProject.Model.UserInfo.PictureID.get
返回null。
以下是xaml主窗口的代码:
public partial class MainWindow : Window
{
public MainWindow(UserInfo userLoginDetails)
{
InitializeComponent();
imgTest.Source = userLoginDetails.PictureID.Source;
}
}
我不知道我哪里出错了,我尝试使用带注释的行,但仍然是null的相同错误。
您的UserInfo类中不应包含Image
元素。
将PictureID
属性的类型更改为ImageSource
public class UserInfo
{
...
public ImageSource PictureID { get; set; }
...
}
并按以下方式设置其值:
if (pictureIdByte != null)
{
using (var stream = new MemoryStream(pictureIdByte))
{
getInfo.PictureID = BitmapFrame.Create(stream,
BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
}
在您的MainWindow构造函数中,如下设置Image的Source:
imgTest.Source = userLoginDetails.PictureID;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.