2014-12-19 49 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(); 
      } 
相關問題