所以我有这些代码可以获取用户信息。
注意:注释行是我已经尝试过的内容。
代码:
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: 'Object reference not set to an instance of an object.'
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 构造函数中,像这样设置图像的源:
imgTest.Source = userLoginDetails.PictureID;
关于C# WPF 从 SQL Server 数据库中检索图像,字节到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48843128/