【问题标题】:Use stored procedure in c# using LINQ to SQL使用 LINQ to SQL 在 c# 中使用存储过程
【发布时间】:2014-02-10 10:40:00
【问题描述】:

我正在寻找如何在 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 PPR=@ppr) 
    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

谢谢

【问题讨论】:

标签: c# asp.net sql-server linq


【解决方案1】:

使用它来转换图像:

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

将“二进制”作为“imagebinary”参数传递给您的方法

【讨论】:

    【解决方案2】:

    您可以从设计器中拖放您的存储过程,它将在您的数据上下文中可用。

    From Microsoft:

    创建返回自动生成的DataContext方法 类型

    1. Server Explorer/Database Explorer 中,展开您正在使用的数据库的 Stored Procedures 节点。
    2. 找到所需的存储过程并将其拖到 O/R 设计器的空白区域。

    DataContext 方法是使用自动生成的 返回类型并出现在 Methods 窗格中。

    创建具有实体返回类型的 DataContext 方法 类

    1. Server Explorer/Database Explorer 中,展开您正在使用的数据库的 Stored Procedures 节点。
    2. 找到所需的存储过程并将其拖到 O/R 设计器中的现有实体类中。

    DataContext 方法是使用选定的返回类型创建的 实体类并出现在 Methods 窗格中。


    其次考虑将您的过程更改为:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      相关资源
      最近更新 更多