如何将Guid值从Manager传递给SQL

时间:2018-03-06 09:41:37

标签: c# sql-server

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

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而不是字符串?

1 个答案:

答案 0 :(得分:0)

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

您必须创建一个新函数,添加SqlDbType.UniqueIdentifier类型的参数。