数据库图片字段直接用SQL语句插入二进制数据,为啥有不对的呢?解决思路
数据库图片字段直接用SQL语句插入二进制数据,为啥有不对的呢???????
数据库:sql server 2005
操作方法:直接用insert向数据库图片字段插入二进制数据
故障现象:
一共用insert插了13个数据,可是其中一个就是不正常
现象为insert插入语句中本来是"0x89504E470D0A1A0A0000000D4948……(省略若干)"
可是完后再select出来中却变为"0x089504E470D0A1A0A0000000D494……(省略若干)"
这就导致了我在程序中读取改行数据显示为图片时程序出错。。。
不知道那个0是怎么多出来的,整体长度没变,第三位多个0,后面整体右移了一位,再截断了最后那一位
二进制数据是我先在程序中,利用程序插入数据库,然后再select出来,复制到insert语句中的。
有一个现象是,这副图的二进制数据比另外12个都长。
------解决方案--------------------
数据库:sql server 2005
操作方法:直接用insert向数据库图片字段插入二进制数据
故障现象:
一共用insert插了13个数据,可是其中一个就是不正常
现象为insert插入语句中本来是"0x89504E470D0A1A0A0000000D4948……(省略若干)"
可是完后再select出来中却变为"0x089504E470D0A1A0A0000000D494……(省略若干)"
这就导致了我在程序中读取改行数据显示为图片时程序出错。。。
不知道那个0是怎么多出来的,整体长度没变,第三位多个0,后面整体右移了一位,再截断了最后那一位
二进制数据是我先在程序中,利用程序插入数据库,然后再select出来,复制到insert语句中的。
有一个现象是,这副图的二进制数据比另外12个都长。
------解决方案--------------------
- C# code
ReadImage.aspx.cs using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Data.SqlClient; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace eMeng.Exam.DataGridShowImage { /// <summary> /// ReadImage 的摘要说明。 /// </summary> public class ReadImage : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 string strImageID = Request.QueryString["id"]; SqlConnection myConnection = new SqlConnection("Data Source=.;Initial Catalog=mxh;User Id=sa;Password=;"); SqlCommand myCommand = new SqlCommand("Select PersonImageType, PersonImage from Person Where PersonID=" + strImageID, myConnection); try { myConnection.Open(); SqlDataReader myDataReader; myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection); if(myDataReader.Read()) { Response.Clear(); Response.ContentType = myDataReader["PersonImageType"].ToString(); Response.BinaryWrite((byte[])myDataReader["PersonImage"]); } myConnection.Close(); } catch (SqlException SQLexc) { } Response.End(); } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } }
------解决方案--------------------
lz参考下 图片转成2进制 放入数据库 asp.net 上
- C# code
protected void Button1_Click(object sender, EventArgs e) { if (FileUpload1.PostedFile.FileName != "") { string name = FileUpload1.PostedFile.FileName; string type = name.Substring(name.LastIndexOf(".") + 1); FileStream fs = File.OpenRead(name); byte[] content = new byte[fs.Length]; fs.Read(content, 0, content.Length); fs.Close(); SqlConnection con = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]); SqlCommand cmd = con.CreateCommand(); con.Open(); cmd.CommandText = "insert into test(image_data) values (@image_data)"; cmd.CommandType = CommandType.Text; if (type == "jpg" || type == "gif" || type == "bmp" || type == "png") { SqlParameter para = cmd.Parameters.Add("@image_data", SqlDbType.Image); para.Value = content; cmd.ExecuteNonQuery(); Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('上传成功!')</script>"); } } else { Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('请选择图片类型的文件!')</script>"); } }