2014-02-10 42 views
0

我正在尋找如何使用存儲過程在C#中使用Linq-to-SQL。在c#中使用存儲過程使用LINQ to SQL

這是我的存儲過程:

ALTER PROCEDURE [dbo].[uploadImage] @ppr INT, 
    @imagename VARCHAR, 
    @imagecontent VARCHAR, 
    @imagebinary IMAGE 
AS 
BEGIN TRANSACTION 

IF EXISTS (
     SELECT ImageID 
     FROM [ImageStorage] 
     WHERE ImageID = (
       SELECT codeimg 
       FROM Agent 
       WHERE PPR = @ppr 
       ) 
     ) 
BEGIN 
    --select ImageBinary from [ImageStorage] where ImageID = (select codeimg from Agent where [email protected]) 
    UPDATE ImageStorage 
    SET ImageName = @imagename, 
     ImageContentType = @imagecontent, 
     ImageBinary = @imagecontent 
    WHERE imageID = (
      SELECT codeimg 
      FROM Agent 
      WHERE PPR = @ppr 
      ) 
END 
ELSE 
    INSERT INTO ImageStorage (
     ImageName, 
     ImageContentType, 
     ImageBinary 
     ) 
    VALUES (
     @imagename, 
     @imagecontent, 
     @imagebinary 
     ) 

COMMIT 

謝謝

+0

這裏http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-看看sql-part-6-retrieve-data-using-stored-procedures.aspx – Christos

+0

您可能只想進行更新並檢查[** @@ ROWCOUNT **](http://technet.microsoft.com/zh-cn/ -us/library/ms187316.aspx)決定進行更新。我相信它在服務器上的工作量會減少(現在您正在查詢它是否存在) – SQLMason

回答

0

使用此功能將圖像轉換:

using (MemoryStream ms = new MemoryStream()) 
{ 
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
    var binary = new System.Data.Linq.Binary(ms.GetBuffer()); 
} 

通 「二進制」 到你的方法爲 「imagebinary」 參數

0

你可以拖放你的存儲過程從設計器,它將是有用的能夠在你的數據上下文中。

From Microsoft:

要創建返回自動生成 類型

  1. 服務器資源管理器/數據庫資源管理器 DataContext方法,擴大存儲過程,你正在使用的數據庫的節點。
  2. 找到所需的存儲過程並將其拖到O/R設計器的空白區域。

在DataContext方法進行自動生成的 返回類型創建並顯示在所述方法窗格。

創建具有實體 類

  1. 的返回類型在服務器資源管理器/數據庫資源管理器 DataContext方法,擴大存儲過程,你正在使用的數據庫的節點。
  2. 找到所需的存儲過程並將其拖到O/R設計器中的現有實體類上。

在DataContext方法與選擇的 實體類的返回類型創建並顯示在所述方法窗格。


其次考慮改變你的PROC這樣:

ALTER PROCEDURE [dbo].[uploadImage] @ppr INT, 
    @imagename VARCHAR, 
    @imagecontent VARCHAR, 
    @imagebinary IMAGE 
AS 
BEGIN 
    UPDATE ImageStorage 
    SET ImageName = @imagename, 
     ImageContentType = @imagecontent, 
     ImageBinary = @imagecontent 
    WHERE @ppr IS NOT NULL 
     AND imageID = (
      SELECT codeimg 
      FROM Agent 
      WHERE PPR = @ppr 
      ) 

    IF @@ROWCOUNT = 0 
     INSERT INTO ImageStorage (
      ImageName, 
      ImageContentType, 
      ImageBinary 
      ) 
     VALUES (
      @imagename, 
      @imagecontent, 
      @imagebinary 
      ) 
END 
相關問題