遇到一个问题,我编写了一些在我的沙盒中编码的内容,包括指向外部数据库但在我发布的环境中不起作用。
我要做的是从存储过程中获取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端架构不佳而有所不同。谢谢你,并为时间道歉。
答案 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()