[英]Use varbinary to retrieve image to database using FileUpload
好的,所以我正在使用通过将其添加到数据库中
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”,我想我已经接近了!
如果要从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();
}
PS使用以下语句环绕您的sqlconnection
using(SqlConnection con = new SqlConnection(""))
{
//your code here
}
避免您执行con.Open()
和con.Close()
编辑:要访问html标记的src属性,只需在html标记中添加runat="server"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.