从T-SQL返回INT,而不是在已发布环境中进行评估

时间:2017-01-31 19:06:23

标签: c# asp.net

遇到一个问题,我编写了一些在我的沙盒中编码的内容,包括指向外部数据库但在我发布的环境中不起作用。

我要做的是从存储过程中获取INT结果。我试过让程序返回INT并将其设置为OUTPUT参数,在任何一种情况下都没有运气。请注意,这可以在我自己的沙箱中使用,但不能在我们发布的环境中使用Visual Studio部署功能进行部署。

这是评估整数返回码的C#:

var returnVal = new SqlParameter("@ReturnValue", SqlDbType.Int)
{
    IsNullable = true,
    Direction = ParameterDirection.ReturnValue
};



var sqlParams = new List<SqlParameter>
{
    new SqlParameter("@Host", dataEntryModel.Host),
    new SqlParameter("@PurchaseOrderNumberUser", dataEntryModel.PurchaseOrderNumberUser),
    new SqlParameter("@PharmacyId", dataEntryModel.BatchUploadPharmacyId),
    new SqlParameter("@NDCTable", table),
    new SqlParameter("@LastModifiedById", dataEntryModel.LastModifiedById),
    new SqlParameter("@POSourceTypeId", dataEntryModel.PurchaseOrderSourceType),
    new SqlParameter("@PoId", dataEntryModel.PurchaseOrderId),
    returnVal
};

using (var connection = new SqlConnection(Database.ConnectionString))
{
    connection.Open();

    using (var command = new SqlCommand("AdminApp._spBatchUploadNDCToPurchaseOrder"))
    {
        command.Connection = connection;
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.AddRange(sqlParams.ToArray());
                 // Setting command timeout to 120 second - Added by Tom Miller 10-31-14
                 command.CommandTimeout = 600;
        command.ExecuteScalar();
        returnPurchaseOrderNumber = Convert.ToInt32(command.Parameters["@ReturnValue"].Value);
    }
}           
return returnPurchaseOrderNumber;

我不确定为什么这在其他环境中不起作用。我已将我的沙盒指向我在部署环境中使用的开发数据库,​​并且它在运行时出现,正在评估的返回代码为0,这是不正确的。

已解决经过一些测试后,我完全偏离了方向。我的数据设置正确,但拉入DEV时的数据布局因SQL端架构不佳而有所不同。谢谢你,并为时间道歉。

2 个答案:

答案 0 :(得分:0)

您试图以错误的方式投射结果。试试这个:

    int result = Convert.ToInt32(command.ExecuteScalar());

答案 1 :(得分:0)

validMonth = False while not validMonth: lookForMonth = input('What month, please? (number from 1 through 12):') try: validMonth = 1<=int(lookForMonth)<=12 except: pass sqlCmd = 'SELECT date FROM bookings WHERE SUBSTR(date,4,2)="%.2i"' % int(lookForMonth) for row in conn.execute(sqlCmd): print (row) 没有名为command的参数。 [编辑:抱歉,是的,请参阅注释]设置断点并检查,但它可能正在评估为@ReturnValue,并尝试将null转换为整数。我希望抛出一个异常,但如果它没有,它将评估为默认的整数值,即0。

如果存储过程返回值,则使用NicoRiff方法并将null的结果分配给变量。如果它正在使用输出参数,那么给它一个使用。声明一个输出参数,如下所示:

ExecuteScalar()