使用varbinary(max)的sql server中的默认配置文件图片

时间:2013-07-29 04:15:09

标签: c# sql-server varbinarymax

我有一个具有用户个人资料页面的Web应用程序。该页面允许用户上传自己的个人资料图片。我找到了一种方法来为我的数据库中的个人资料图片设置默认varbinary(max)值(SQL Server 2008)。像Facebook这样的东西,一旦你注册就有一个默认的个人资料图片。我可以将图片上传到数据库并显示出来,但如果我的数据库中的个人资料图片列是NULL,我会得到解码图像的错误。

上传图片代码:

string filePath = FileUpload1.PostedFile.FileName;
string filename = Path.GetFileName(filePath);
string ext = Path.GetExtension(filename);

string contenttype = String.Empty;

switch (ext)
{
    case ".jpg":
       contenttype = "image/jpg";
       break;
}

if (contenttype != String.Empty)
{
   System.Drawing.Image uploaded = System.Drawing.Image.FromStream(FileUpload1.PostedFile.InputStream);

   System.Drawing.Image newImage = new Bitmap(1024, 768);

   using (Graphics g = Graphics.FromImage(newImage))
   {
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.DrawImage(uploaded, 0, 0, 1024, 768);
   }

   byte[] results;

   using (MemoryStream ms = new MemoryStream())
   {
         ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(c => c.FormatID == ImageFormat.Jpeg.Guid);
         EncoderParameters jpegParms = new EncoderParameters(1);
         jpegParms.Param[0] = new EncoderParameter(Encoder.Quality, 95L);
         newImage.Save(ms, codec, jpegParms);
         results = ms.ToArray();
   }

显示图片代码:

string strQuery = "select profilepic from MemberAccount where nric='"+ Session["nric"] +"'";
SqlCommand cmd = new SqlCommand(strQuery);
DataTable dt = GetData(cmd);
if (!dt.Rows[0]["profilepicture"].Equals(DBNull.Value))
{
   download(dt);
}

private DataTable GetData(SqlCommand cmd)
{
    DataTable dt = new DataTable();
    SqlConnection con = new SqlConnection("Data Source = localhost; Initial Catalog = MajorProject; Integrated Security= SSPI");
    SqlDataAdapter sda = new SqlDataAdapter();
    cmd.CommandType = CommandType.Text;
    cmd.Connection = con;
    try
    {
       con.Open();
       sda.SelectCommand = cmd;
       sda.Fill(dt);
       return dt;
    }
    catch
    {
       return null;
    }
    finally
    {
        con.Close();
        sda.Dispose();
        con.Dispose();
    }
}


private void download(DataTable dt)
{
    Byte[] bytes = (Byte[])dt.Rows[0]["profilepicture"];
    Response.Buffer = true;
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "image/jpg";
    Response.BinaryWrite(bytes);
    Response.End();
}

在显示图像但在出现错误时在部件中添加了if语句

if (!dt.Rows[0]["profilepicture"].Equals(DBNull.Value))

这一行给出错误:

Object reference not set to an instance of an object.

1 个答案:

答案 0 :(得分:0)

为什么不在网站的某些图片文件夹中保存默认图片? 这样您就不必读取数据库列,而是使用图像控件中的相对路径。

尝试比较

if(!dt.Rows[0]["profilepicture"].Equals(DBNull.Value))