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;
    }

解答

public class UserInfo
{
    //...
    public ImageSource PictureID { get; set; } 
    //...
}

参考URL

https://stackoverflow.com/questions/48843128/c-sharp-wpf-retrieve-image-from-sql-server-database-byte-to-image

猜你喜欢

转载自blog.csdn.net/sdhongjun/article/details/82351059