如何将Guid值从Manager传递给SQL

问题描述 投票:-1回答:1

这是我试图传递数据的管理器代码

public Response AddDocument(JDocument value)
{
    var response = new Response();
    try
    {
        string spName = "[dbo].[xxxxxxxxx]";
        this.Connect();
        this.ClearSPParams();
        this.AddSPStringParam("@Id1", value.Id1.ToString()); 
        this.AddSPStringParam("@Id2", value.Id2.ToString());
        this.AddSPStringParam("@DocumentType", value.DocumentType);
        this.AddSPStringParam("@DocumentName", value.DocumentName);
        this.AddSPStringParam("@Format", value.Format);
        this.AddSPStringParam("@Description", value.Description);
        this.AddSPStringParam("@Folder", value.Folder);
        this.AddSPStringParam("@DocumentPath", value.DocumentPath);
        this.AddSPFloatParam("@FileSizeInKB", value.FileSizeInKB);                        
        this.AddSPParamOut("@DocId", 50);
        this.AddSPReturnIntParam("@RetVal");
        this.ExecuteSelectSP(spName);
        var id = this.GetOutValueString("@DocId");
        if (!string.IsNullOrEmpty(id))
            value.Id = Guid.Parse(id);
        response.Code = this.GetOutValueInt("@RetVal");
    }
    catch (Exception ex)
    {
        Utilities.Utils.Write(ex);
    }
}

在我的存储过程中它是:

ALTER PROCEDURE [dbo].[xxxxxxxx]
 @Id1 uniqueidentifier,
 @Id2 uniqueidentifier,
 @DocumentType varchar(50)=null,
 @DocumentName varchar(100)=null,
 @Format varchar(50)=null,
 @DocumentPath varchar(256),
 @Description varchar(250)=null,
 @Folder varchar(30),
 @FileSizeInKB float=null,
 @DocId uniqueidentifier OUTPUT

这会抛出一个错误,指出无法将varchar转换为唯一标识符。是否可以替代AddSPStringParam,以便我可以直接传递Guid / uniqueidentifier而不是字符串?

c# sql-server
1个回答
0
投票

您的AddSPStringParam正在将参数作为varchar添加到存储过程中。但是,您的存储过程需要uniqueidentifier

您将不得不创建一个新函数,添加SqlDbType.UniqueIdentifier类型的参数。

© www.soinside.com 2019 - 2024. All rights reserved.