Merge pull request #158 from ChrisJollyAU/fixdecint64param

Fix using decimal and Int64 in parameters
pull/159/head
Christopher Jolly 2 years ago committed by GitHub
commit 0d5676a4e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,5 +1,6 @@
using System.Data;
using System.Data.Common;
using System.Linq;
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Storage;
@ -77,7 +78,23 @@ namespace EntityFrameworkCore.Jet.Storage.Internal
protected override void ConfigureParameter(DbParameter parameter)
{
base.ConfigureParameter(parameter);
//Decimals needs to be mapped to Numeric for Jet.
//Using Decimal is fine for OleDb but Odbc doesn't like it.
//Have to use Numeric for Odbc.
//Suspect this will also fix any formatting erros with , and . for decimal separator and space and , for digit separator
//OdbcType.Numeric = 7;
//OleDbType.Numeric = 131;
var setodbctype = parameter.GetType().GetMethods().FirstOrDefault(x => x.Name == "set_OdbcType");
var setoledbtype = parameter.GetType().GetMethods().FirstOrDefault(x => x.Name == "set_OleDbType");
if (setodbctype != null)
{
setodbctype.Invoke(parameter, new object?[] { 7 });
}
else if (setoledbtype != null)
{
setoledbtype.Invoke(parameter, new object?[] { 131 });
}
if (Size.HasValue
&& Size.Value != -1)
{

@ -1,5 +1,6 @@
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Storage;
using System.Data.Common;
namespace EntityFrameworkCore.Jet.Storage.Internal
{
@ -17,5 +18,14 @@ namespace EntityFrameworkCore.Jet.Storage.Internal
protected override RelationalTypeMapping Clone(RelationalTypeMappingParameters parameters)
=> new JetLongTypeMapping(parameters);
protected override void ConfigureParameter(DbParameter parameter)
{
base.ConfigureParameter(parameter);
//Needs to be Object. Using BigInt doesn't always work
//If the argument value is a long and within Int32 range, having it as BigInt in x86 works
//When running in x64 it fails to convert. Using Object bypasses the conversion
parameter.DbType = System.Data.DbType.Object;
}
}
}

@ -165,7 +165,7 @@ WHERE `c`.`City` = @__city_0
AssertSql(
"""
@__p_0='2' (Nullable = true)
@__p_0='2' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e`
@ -173,7 +173,7 @@ WHERE `c`.`City` = @__city_0
""",
//
"""
@__p_0='5' (Nullable = true)
@__p_0='5' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e`
@ -187,7 +187,7 @@ WHERE `c`.`City` = @__city_0
AssertSql(
"""
@__p_0='1' (Nullable = true)
@__p_0='1' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e`
@ -195,7 +195,7 @@ WHERE `c`.`City` = @__city_0
""",
//
"""
@__p_0='5' (Nullable = true)
@__p_0='5' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e`
@ -407,7 +407,7 @@ WHERE `c`.`City` = @__InstanceFieldValue_0
AssertSql(
"""
@__p_0='2' (Nullable = true)
@__p_0='2' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e`
@ -415,7 +415,7 @@ WHERE `c`.`City` = @__InstanceFieldValue_0
""",
//
"""
@__p_0='5' (Nullable = true)
@__p_0='5' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e`
@ -441,7 +441,7 @@ WHERE `c`.`City` = @__InstanceFieldValue_0
""",
//
"""
@__p_0='5' (Nullable = true)
@__p_0='5' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e`
@ -449,7 +449,7 @@ WHERE `c`.`City` = @__InstanceFieldValue_0
""",
//
"""
@__p_0='2' (Nullable = true)
@__p_0='2' (Nullable = true) (DbType = Object)
SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e`

Loading…
Cancel
Save