数据库图片字段直接用SQL语句插入二进制数据,为啥有不对的呢???????
数据库:sql server 2005
操作方法:直接用insert向数据库图片字段插入二进制数据
故障现象:
一共用insert插了13个数据,可是其中一个就是不正常
现象为insert插入语句中本来是"0x89504E470D0A1A0A0000000D4948……(省略若干)"
可是完后再select出来中却变为"0x089504E470D0A1A0A0000000D494……(省略若干)"
这就导致了我在程序中读取改行数据显示为图片时程序出错。。。
不知道那个0是怎么多出来的,整体长度没变,第三位多个0,后面整体右移了一位,再截断了最后那一位
二进制数据是我先在程序中,利用程序插入数据库,然后再select出来,复制到insert语句中的。
有一个现象是,这副图的二进制数据比另外12个都长。
[解决办法]
ReadImage.aspx.csusing 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 上
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>"); } }
[解决办法]
以前做 图片上传时 上传BMP文件 只有400多k 它上传不能 转成 jpg 它就能传了。。不知道是什么原因 十分奇怪
[解决办法]
代码看不出问题。。奇怪。。。
[解决办法]
俺也遇到这样的问题,学习关注
[解决办法]
我也遇过类似的问题,直接二进制insert有问题,但如果从其他记录update过去,又没有问题.
如果你有图片,可否考虑用openrowset插入图片
Update FaceValue Set binary_data = (select binary_data From OPEMROWSET( BULK 'C:\temp\bfile01.jpg',SINGLE_BLOB) As F(binary_data))
[解决办法]
兴许是图片问题
把图片PS一下,如加个小点上去(几乎看不到的小点).然后另存图片再导进,就知道是不是图片问题了
[解决办法]
1. 在存入库之前对数据转义;
2. 存大量二进制数据,不要用Insert Into,因为SQL语句有长度限制,C++里用PutCollect,C#我不懂,自己找
[解决办法]
检查一下数据库的字符集吧,可能是这个的问题..;
[解决办法]
DEBUG追踪一下或者把"0x???????"换成byte[]来看看
你可能会有新发现
[解决办法]
同意 三十九楼的意见 我也遇到过 这问题 不要直接用 insert 语句插入 可以定义参数 仿照 八楼 的写 就不会出错了