I have the following code:
public async Task<(int purchaseOrderId, string PONum)> AddPurchaseOrder(PurchaseOrderMaster purchaseOrderMaster)
{
try
{
var sqlQuery = new StringBuilder();
var paramSearch = new DynamicParameters();
_ = sqlQuery.Append($@"INSERT INTO PurchaseOrder (PONum, VendorID, WHId, PODate, ReferenceNum, EstArrivalDate, POType, SubTotal, TAX, ShippingHandling, Total, EnteredBy, EnteredOn, IsDelete)
OUTPUT inserted.PurchaseOrderId, inserted.PONum
VALUES (FLOOR(RAND() * 900000) + 100000, @VendorID, @WHId, @PODate, @ReferenceNum, @EstArrivalDate, @POType, @SubTotal, @TAX, @ShippingHandling, @Total, @EnteredBy, GETUTCDATE(), 'N');
");
paramSearch.Add("@VendorID", purchaseOrderMaster.VendorID);
paramSearch.Add("@WHId", purchaseOrderMaster.WHId);
paramSearch.Add("@PODate", purchaseOrderMaster.PODate);
paramSearch.Add("@ReferenceNum", purchaseOrderMaster.ReferenceNum);
paramSearch.Add("@EstArrivalDate", purchaseOrderMaster.EstArrivalDate);
paramSearch.Add("@POType", purchaseOrderMaster.POType);
paramSearch.Add("@SubTotal", purchaseOrderMaster.SubTotal);
paramSearch.Add("@TAX", purchaseOrderMaster.TAX);
paramSearch.Add("@ShippingHandling", purchaseOrderMaster.ShippingHandling);
paramSearch.Add("@Total", purchaseOrderMaster.Total);
paramSearch.Add("@EnteredBy", purchaseOrderMaster.EnteredBy);
return await dbHelper.ExecuteScalarAsync<(int, string)>(sqlQuery.ToString(), paramSearch).ConfigureAwait(false);
}
catch (Exception ex)
{
throw new BadRequestException(ex.Message);
}
}
I am getting PurchaseOrderId and PONum from the SQL query result and want to return as a tuple (int purchaseOrderId, string PONum) in the C# code.
At query execution statement, I am getting an error as below:
{"Invalid cast from 'System.Int32' to 'System.ValueTuple`2[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]'."}
How can the result be converted to a tuple?
StringBuilderto store a constant string? Why are you using an interpolated string and not interpolating anything? Why are you using dynamic parameters for column values which presumably have a type? Why do you throw away the exception?