c# - 使用 varbinary 使用 FileUpload 将图像检索到数据库

标签 c# sql asp.net varbinary

好吧,我正在使用将其添加到数据库中

  HttpPostedFile postedFile = eventImage.PostedFile;
        string fileExtension = Path.GetExtension(postedFile.FileName);

        if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".png")
        {
            Stream stream = postedFile.InputStream;
            BinaryReader reader = new BinaryReader(stream);
            byte[] imgByte = reader.ReadBytes((int)stream.Length);
            con = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-StudentMoneySaver-20160203040444.mdf;Initial Catalog=aspnet-StudentMoneySaver-20160203040444;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("insert into Events (AspNetUsersId,EvtName,EvtType,EvtDescription,EvtDate,EvtVote, EvtImage) values (@AspNetUsersId, @EvtName, @EvtType, @EvtDescription, @EvtDate, @EvtVote, @EvtImage)", con);

            cmd.Parameters.AddWithValue("@AspNetUsersId", userId);
            cmd.Parameters.AddWithValue("@EvtName", eventName.Text);
            cmd.Parameters.AddWithValue("@EvtType", eventType.Text);
            cmd.Parameters.AddWithValue("@EvtDescription", eventDescription.Text);
            cmd.Parameters.AddWithValue("@EvtDate", datetimepicker.Value);
            cmd.Parameters.AddWithValue("@EvtVote", 0);
            cmd.Parameters.Add("@EvtImage", SqlDbType.VarBinary).Value = imgByte;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }

并尝试使用

只调用图像
  byte[] imgByte = null;
        con = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-StudentMoneySaver-20160203040444.mdf;Initial Catalog=aspnet-StudentMoneySaver-20160203040444;Integrated Security=True");
        SqlCommand cmd = new SqlCommand("SELECT * FROM Events", con);
        con.Open();
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds);
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            string str = Convert.ToBase64String(imgByte);
            imageTest.Src = "data:Image/png;base64," + str;
        }

前端代码为

<img runat="server" id="imageTest" src="imageIDtagName" />

我收到错误消息“值不能为空。 参数名称:inArray

描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。

异常详细信息:System.ArgumentNullException:值不能为 null。 参数名称:inArray"我想我已经接近了!

Events Table

最佳答案

如果你想从 SQL 加载图像,你可以这样做:

byte[] imgByte = null;

SqlCommand cmd = new SqlCommand("SELECT Image FROM tableName",yourConnectionStringHere);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.fill(ds);
foreach(DataRow dr in ds.Tables[0].Rows)
{
  imgByte = (byte[])(dr["ImageColumnNameHere"].ToString());
  string str = Convert.ToBase64String(imgByte);
  imageIDtagName.Src = "data:Image/png;base64," + str;
}

使用文件上传保存图像是这样完成的:

HttpPostedFile postedFile = imgFile.PostedFile;
string fileExtension = Path.GetExtension(postedFile.FileName);

 if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".png")
 {
            Stream stream = postedFile.InputStream;
            BinaryReader reader = new BinaryReader(stream);
            byte[] imgByte = reader.ReadBytes((int)stream.Length);
     SqlCommand cmd = new Sqlcommand("INSERT INTO tableName(Image) VALUES(@img)",yourConnectionStringHere);
cmd.Parameters.Add("@img",SqlDbType.VarBinary).Value = imgByte;
     cmd.ExecuteNonQuery();
 }

附注使用 using 语句包围您的 sqlconnection,例如

using(SqlConnection con = new SqlConnection(""))
{
   //your code here
}

让您免于执行con.Open()con.Close()

编辑: 要访问 html 标签的 src 属性,只需在 html 标签中添加 runat="server" 即可。

关于c# - 使用 varbinary 使用 FileUpload 将图像检索到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611795/

相关文章:

c# - XML SelectNode() 不返回任何内容。为什么命名空间很重要?

c# - asp下拉列表 bool 值总是设置为false?

sql - 从 jsonb 列获取特定值

asp.net - IIS 中缺少 ASP.NET 选项卡

asp.net - 表单例份验证 SSO - 为什么 User.Identity.IsAuthenticated == false

c# - .net 事务范围 block 第二个事务

c# - 如何先写单元测试后写代码?

sql - 在同一列上按升序或降序有条件地排序

MySQL删除在另一个表中找到的左连接

c# - 在 ASP.Net 中使用 Google Checkout