2014-12-19 21 views
0

我试图在这里粗略地列出一个概念,并且我有一个奇怪的问题。为了您的娱乐...Varbinary(最大)插入 - 在不相关的db记录之间重复varbinary(max)字段

总结:

我想要做的就是产生在C#代码的图像,将其插入到一个SQL2012分贝的VARBINARY(最大值)字段,然后在显示它SSRS报告。 (是的,我已经记得在每次测试后删除rdl.data缓存。)图像只是一个带有高亮弧段的圆。这个数据库表是基于http://www.kodyaz.com/articles/display-database-image-using-sql-server-2008-reporting-services.aspx中的一个我唯一改变的是添加一个主键。我创建了一个DataSet(xsd)文件,并从服务器资源管理器中将表拖动到它上面。

奇怪的是,虽然我插入成功的记录,并正确插入fname字段,据我所知,二进制字段始终是第一个添加的副本。当我最初通过写入本地磁盘文件来测试主要图形代码时,我还应该提到,图像总是正确显示。

起初,我认为这可能是一个问题,我从一个Web服务,但我得到了完全相同的行为在本地测试Web应用程序中运行代码。所有的代码都是本地的方法。没有什么远程执行无可否认,我只涉猎图形。这是从各种其他参考黑客入侵。这是代码的核心。我试过/抓住它并没有给出任何例外。

Bitmap x; 
Pen p = new Pen(System.Drawing.Color.Red, 5); 
Pen p2 = new Pen(System.Drawing.Color.Pink, 5); 
SolidBrush b; 
RectangleF rf; 
Graphics gr;  
p = new Pen(System.Drawing.Color.Red, iThick); 
p2 = new Pen(System.Drawing.Color.Pink, iThick); 
x = new Bitmap(500, 500); 
rf = new RectangleF(0, 0, x.Width, x.Height); 
gr = Graphics.FromImage(x); 
b = new SolidBrush(System.Drawing.Color.White); 
gr.FillRectangle(b, rf); 
rf = new RectangleF(p.Width, p.Width, x.Width - p.Width * 2, x.Height - p.Width * 2); 
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
gr.DrawEllipse(p2, rf); 
gr.DrawArc(p, rf, fStartAngle, fSweepAngle); 
byte[] bytes; 
using (System.IO.MemoryStream sampleStream = new System.IO.MemoryStream()) 
{     
     x.Save(sampleStream, System.Drawing.Imaging.ImageFormat.Bmp);     
     bytes = sampleStream.ToArray(); 
     dsCountryTableAdapters.DBFiles1TableAdapter ta = new dsCountryTableAdapters.DBFiles1TableAdapter(); 
     ta.Insert(sImageName, bytes); 
} 

回答

0

无论什么问题原本是从TableAdapter.Insert改变插入方法的SQLConnection/SqlCommand的设置治愈它。 (没有改变数据表结构。)仍然好奇为什么TA没有工作。

using (SqlCommand cmd = new SqlCommand("INSERT INTO DBFiles(fname, [file]) VALUES (@fname, @file)", conn)) 
      { 
       using (System.IO.MemoryStream sampleStream = new System.IO.MemoryStream()) 
       { 
        x.Save(sampleStream, System.Drawing.Imaging.ImageFormat.Bmp); 
        bytes = sampleStream.ToArray(); 
       }     
       cmd.Parameters.Add("@fname", SqlDbType.NVarChar, 1000).Value = sImageName; 
       cmd.Parameters.Add("@file", SqlDbType.VarBinary, -1).Value = bytes; 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       conn.Close(); 
      } 
相关问题