From b5b79eba5c88ed9dd0f12775f9cc1a67e19385b4 Mon Sep 17 00:00:00 2001 From: Saurabh Singh Date: Wed, 12 Feb 2020 16:36:32 -0800 Subject: [PATCH 1/9] Adding a wrapper for x86 --- .../System.Data.OleDb/src/OleDbCommand.cs | 32 +++++++++- .../System.Data.OleDb/src/OleDbStruct.cs | 60 ++++++++++++++++++- .../src/UnsafeNativeMethods.cs | 2 +- .../System.Data.OleDb/tests/Helpers.cs | 6 +- 4 files changed, 90 insertions(+), 10 deletions(-) diff --git a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs index 0f8581f708e582..05b73a6d3817bd 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs @@ -410,15 +410,41 @@ private void CreateAccessor() } _dbBindings = bindings; } - - private void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParameters commandWithParameters, tagDBPARAMBINDINFO[] bindInfo) + private static readonly bool s_runningOnX86 = RuntimeInformation.ProcessArchitecture == Architecture.X86; + private unsafe void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParameters commandWithParameters, tagDBPARAMBINDINFO[] bindInfo) { IntPtr[] ordinals = new IntPtr[bindInfo.Length]; for (int i = 0; i < ordinals.Length; ++i) { ordinals[i] = (IntPtr)(i + 1); } - OleDbHResult hr = commandWithParameters.SetParameterInfo((IntPtr)bindInfo.Length, ordinals, bindInfo); + + OleDbHResult hr; + + if (s_runningOnX86) + { + tagDBPARAMBINDINFO_x86[] bindInfo_x86 = new tagDBPARAMBINDINFO_x86[bindInfo.Length]; + for (int i = 0; i < bindInfo.Length; i++) + { + bindInfo_x86[i].pwszDataSourceType = bindInfo[i].pwszDataSourceType; + bindInfo_x86[i].pwszName = bindInfo[i].pwszName; + bindInfo_x86[i].ulParamSize = bindInfo[i].ulParamSize; + bindInfo_x86[i].dwFlags = bindInfo[i].dwFlags; + bindInfo_x86[i].bPrecision = bindInfo[i].bPrecision; + bindInfo_x86[i].bScale = bindInfo[i].bScale; + } + fixed (tagDBPARAMBINDINFO_x86* p = &bindInfo_x86[0]) + { + hr = commandWithParameters.SetParameterInfo((IntPtr)bindInfo.Length, ordinals, (IntPtr)p); + } + } + else + { + fixed (tagDBPARAMBINDINFO* p = &bindInfo[0]) + { + hr = commandWithParameters.SetParameterInfo((IntPtr)bindInfo.Length, ordinals, (IntPtr)p); + } + } if (hr < 0) { diff --git a/src/libraries/System.Data.OleDb/src/OleDbStruct.cs b/src/libraries/System.Data.OleDb/src/OleDbStruct.cs index 1254602394db7a..0b74e4e45d5204 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbStruct.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbStruct.cs @@ -33,11 +33,65 @@ typedef struct tagDBPARAMBINDINFO { } #endif -#if (WIN32 && !ARCH_arm) - [StructLayoutAttribute(LayoutKind.Sequential, Pack = 2)] -#else + + [StructLayout(LayoutKind.Sequential, Pack = 2)] + internal struct tagDBPARAMBINDINFO_x86 + { + internal IntPtr pwszDataSourceType; + internal IntPtr pwszName; + internal IntPtr ulParamSize; + internal int dwFlags; + internal byte bPrecision; + internal byte bScale; + +#if DEBUG + public override string ToString() + { + StringBuilder builder = new StringBuilder(); + builder.Append("tagDBPARAMBINDINFO").Append(Environment.NewLine); + if (IntPtr.Zero != pwszDataSourceType) + { + builder.Append("pwszDataSourceType =").Append(Marshal.PtrToStringUni(pwszDataSourceType)).Append(Environment.NewLine); + } + builder.Append("\tulParamSize =" + ulParamSize.ToInt64().ToString(CultureInfo.InvariantCulture)).Append(Environment.NewLine); + builder.Append("\tdwFlags =0x" + dwFlags.ToString("X4", CultureInfo.InvariantCulture)).Append(Environment.NewLine); + builder.Append("\tPrecision =" + bPrecision.ToString(CultureInfo.InvariantCulture)).Append(Environment.NewLine); + builder.Append("\tScale =" + bScale.ToString(CultureInfo.InvariantCulture)).Append(Environment.NewLine); + return builder.ToString(); + } +#endif + } + + [StructLayout(LayoutKind.Sequential, Pack = 8)] + internal struct tagDBPARAMBINDINFO_x64 + { + internal IntPtr pwszDataSourceType; + internal IntPtr pwszName; + internal IntPtr ulParamSize; + internal int dwFlags; + internal byte bPrecision; + internal byte bScale; + +#if DEBUG + public override string ToString() + { + StringBuilder builder = new StringBuilder(); + builder.Append("tagDBPARAMBINDINFO").Append(Environment.NewLine); + if (IntPtr.Zero != pwszDataSourceType) + { + builder.Append("pwszDataSourceType =").Append(Marshal.PtrToStringUni(pwszDataSourceType)).Append(Environment.NewLine); + } + builder.Append("\tulParamSize =" + ulParamSize.ToInt64().ToString(CultureInfo.InvariantCulture)).Append(Environment.NewLine); + builder.Append("\tdwFlags =0x" + dwFlags.ToString("X4", CultureInfo.InvariantCulture)).Append(Environment.NewLine); + builder.Append("\tPrecision =" + bPrecision.ToString(CultureInfo.InvariantCulture)).Append(Environment.NewLine); + builder.Append("\tScale =" + bScale.ToString(CultureInfo.InvariantCulture)).Append(Environment.NewLine); + return builder.ToString(); + } #endif + } + + [StructLayout(LayoutKind.Sequential, Pack = 8)] internal struct tagDBPARAMBINDINFO { internal IntPtr pwszDataSourceType; diff --git a/src/libraries/System.Data.OleDb/src/UnsafeNativeMethods.cs b/src/libraries/System.Data.OleDb/src/UnsafeNativeMethods.cs index d18c574731bcff..07df57c6c14831 100644 --- a/src/libraries/System.Data.OleDb/src/UnsafeNativeMethods.cs +++ b/src/libraries/System.Data.OleDb/src/UnsafeNativeMethods.cs @@ -409,7 +409,7 @@ HRESULT SetParameterInfo( System.Data.OleDb.OleDbHResult SetParameterInfo( [In] IntPtr cParams, [In, MarshalAs(UnmanagedType.LPArray)] IntPtr[] rgParamOrdinals, - [In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct)] System.Data.OleDb.tagDBPARAMBINDINFO[] rgParamBindInfo); + [In] IntPtr rgParamBindInfo); } [Guid("2206CCB1-19C1-11D1-89E0-00C04FD7A829"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), ComImport, SuppressUnmanagedCodeSecurity] diff --git a/src/libraries/System.Data.OleDb/tests/Helpers.cs b/src/libraries/System.Data.OleDb/tests/Helpers.cs index 0cb82c5c7487b9..6feb3c1e7cb27d 100644 --- a/src/libraries/System.Data.OleDb/tests/Helpers.cs +++ b/src/libraries/System.Data.OleDb/tests/Helpers.cs @@ -11,7 +11,7 @@ public static class Helpers public const string IsDriverAvailable = nameof(Helpers) + "." + nameof(GetIsDriverAvailable); public const string IsAceDriverAvailable = nameof(Helpers) + "." + nameof(GetIsAceDriverAvailable); public static bool GetIsDriverAvailable() => Nested.IsAvailable; - public static bool GetIsAceDriverAvailable() => GetIsDriverAvailable() && !PlatformDetection.Is32BitProcess; + public static bool GetIsAceDriverAvailable() => GetIsDriverAvailable();// && !PlatformDetection.Is32BitProcess; public static string ProviderName => Nested.ProviderName; public static string GetTableName(string memberName) => memberName + ".csv"; @@ -21,7 +21,7 @@ private class Nested public static readonly string ProviderName; public static Nested Instance => s_instance; private static readonly Nested s_instance = new Nested(); - private const string ExpectedProviderName = @"Microsoft.ACE.OLEDB.12.0"; + private const string ExpectedProviderName = @"Microsoft.Jet.OLEDB.4.0"; private Nested() { } static Nested() { @@ -34,7 +34,7 @@ static Nested() providerNames.Add((string)row[providersRegistered]); } // skip if x86 or if the expected driver not available - IsAvailable = !PlatformDetection.Is32BitProcess && providerNames.Contains(ExpectedProviderName); + IsAvailable = providerNames.Contains(ExpectedProviderName); if (!CultureInfo.CurrentCulture.Name.Equals("en-US", StringComparison.OrdinalIgnoreCase)) { IsAvailable = false; // ActiveIssue: https://github.com/dotnet/corefx/issues/38737 From bbeaa04db14347c3db498171c1c6f46450631cb6 Mon Sep 17 00:00:00 2001 From: Saurabh Singh Date: Wed, 12 Feb 2020 16:43:01 -0800 Subject: [PATCH 2/9] Remove extra code --- .../System.Data.OleDb/src/OleDbStruct.cs | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/src/libraries/System.Data.OleDb/src/OleDbStruct.cs b/src/libraries/System.Data.OleDb/src/OleDbStruct.cs index 0b74e4e45d5204..909f0ec124b162 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbStruct.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbStruct.cs @@ -44,35 +44,6 @@ internal struct tagDBPARAMBINDINFO_x86 internal byte bPrecision; internal byte bScale; -#if DEBUG - public override string ToString() - { - StringBuilder builder = new StringBuilder(); - builder.Append("tagDBPARAMBINDINFO").Append(Environment.NewLine); - if (IntPtr.Zero != pwszDataSourceType) - { - builder.Append("pwszDataSourceType =").Append(Marshal.PtrToStringUni(pwszDataSourceType)).Append(Environment.NewLine); - } - builder.Append("\tulParamSize =" + ulParamSize.ToInt64().ToString(CultureInfo.InvariantCulture)).Append(Environment.NewLine); - builder.Append("\tdwFlags =0x" + dwFlags.ToString("X4", CultureInfo.InvariantCulture)).Append(Environment.NewLine); - builder.Append("\tPrecision =" + bPrecision.ToString(CultureInfo.InvariantCulture)).Append(Environment.NewLine); - builder.Append("\tScale =" + bScale.ToString(CultureInfo.InvariantCulture)).Append(Environment.NewLine); - return builder.ToString(); - } -#endif - } - - - [StructLayout(LayoutKind.Sequential, Pack = 8)] - internal struct tagDBPARAMBINDINFO_x64 - { - internal IntPtr pwszDataSourceType; - internal IntPtr pwszName; - internal IntPtr ulParamSize; - internal int dwFlags; - internal byte bPrecision; - internal byte bScale; - #if DEBUG public override string ToString() { From fbb86a10ceaad7f2f0083e37407a5fad82536b16 Mon Sep 17 00:00:00 2001 From: Saurabh Singh Date: Wed, 12 Feb 2020 16:46:43 -0800 Subject: [PATCH 3/9] Restore helper --- src/libraries/System.Data.OleDb/tests/Helpers.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Data.OleDb/tests/Helpers.cs b/src/libraries/System.Data.OleDb/tests/Helpers.cs index 6feb3c1e7cb27d..0cb82c5c7487b9 100644 --- a/src/libraries/System.Data.OleDb/tests/Helpers.cs +++ b/src/libraries/System.Data.OleDb/tests/Helpers.cs @@ -11,7 +11,7 @@ public static class Helpers public const string IsDriverAvailable = nameof(Helpers) + "." + nameof(GetIsDriverAvailable); public const string IsAceDriverAvailable = nameof(Helpers) + "." + nameof(GetIsAceDriverAvailable); public static bool GetIsDriverAvailable() => Nested.IsAvailable; - public static bool GetIsAceDriverAvailable() => GetIsDriverAvailable();// && !PlatformDetection.Is32BitProcess; + public static bool GetIsAceDriverAvailable() => GetIsDriverAvailable() && !PlatformDetection.Is32BitProcess; public static string ProviderName => Nested.ProviderName; public static string GetTableName(string memberName) => memberName + ".csv"; @@ -21,7 +21,7 @@ private class Nested public static readonly string ProviderName; public static Nested Instance => s_instance; private static readonly Nested s_instance = new Nested(); - private const string ExpectedProviderName = @"Microsoft.Jet.OLEDB.4.0"; + private const string ExpectedProviderName = @"Microsoft.ACE.OLEDB.12.0"; private Nested() { } static Nested() { @@ -34,7 +34,7 @@ static Nested() providerNames.Add((string)row[providersRegistered]); } // skip if x86 or if the expected driver not available - IsAvailable = providerNames.Contains(ExpectedProviderName); + IsAvailable = !PlatformDetection.Is32BitProcess && providerNames.Contains(ExpectedProviderName); if (!CultureInfo.CurrentCulture.Name.Equals("en-US", StringComparison.OrdinalIgnoreCase)) { IsAvailable = false; // ActiveIssue: https://github.com/dotnet/corefx/issues/38737 From 5fcc4f4d9c8014cde6bedcb0afdb3ea77f204e52 Mon Sep 17 00:00:00 2001 From: Saurabh Singh Date: Wed, 12 Feb 2020 16:55:47 -0800 Subject: [PATCH 4/9] Rearrange code --- src/libraries/System.Data.OleDb/src/OleDbCommand.cs | 4 +++- src/libraries/System.Data.OleDb/src/OleDbStruct.cs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs index 05b73a6d3817bd..3d03a15eb0add9 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs @@ -44,6 +44,8 @@ public sealed class OleDbCommand : DbCommand, ICloneable, IDbCommand private int _changeID; private int _lastChangeID; + private static readonly bool s_runningOnX86 = RuntimeInformation.ProcessArchitecture == Architecture.X86; + public OleDbCommand() : base() { GC.SuppressFinalize(this); @@ -410,7 +412,7 @@ private void CreateAccessor() } _dbBindings = bindings; } - private static readonly bool s_runningOnX86 = RuntimeInformation.ProcessArchitecture == Architecture.X86; + private unsafe void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParameters commandWithParameters, tagDBPARAMBINDINFO[] bindInfo) { IntPtr[] ordinals = new IntPtr[bindInfo.Length]; diff --git a/src/libraries/System.Data.OleDb/src/OleDbStruct.cs b/src/libraries/System.Data.OleDb/src/OleDbStruct.cs index 909f0ec124b162..2dfff4fc61101e 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbStruct.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbStruct.cs @@ -48,7 +48,7 @@ internal struct tagDBPARAMBINDINFO_x86 public override string ToString() { StringBuilder builder = new StringBuilder(); - builder.Append("tagDBPARAMBINDINFO").Append(Environment.NewLine); + builder.Append("tagDBPARAMBINDINFO_x86").Append(Environment.NewLine); if (IntPtr.Zero != pwszDataSourceType) { builder.Append("pwszDataSourceType =").Append(Marshal.PtrToStringUni(pwszDataSourceType)).Append(Environment.NewLine); From 9a05e3327eec264dbbf7377f008684bd06591fd1 Mon Sep 17 00:00:00 2001 From: Saurabh Singh Date: Wed, 12 Feb 2020 17:08:53 -0800 Subject: [PATCH 5/9] Use Marshaling --- src/libraries/System.Data.OleDb/src/OleDbCommand.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs index 3d03a15eb0add9..63aec6c6425fb4 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs @@ -428,12 +428,10 @@ private unsafe void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParam tagDBPARAMBINDINFO_x86[] bindInfo_x86 = new tagDBPARAMBINDINFO_x86[bindInfo.Length]; for (int i = 0; i < bindInfo.Length; i++) { - bindInfo_x86[i].pwszDataSourceType = bindInfo[i].pwszDataSourceType; - bindInfo_x86[i].pwszName = bindInfo[i].pwszName; - bindInfo_x86[i].ulParamSize = bindInfo[i].ulParamSize; - bindInfo_x86[i].dwFlags = bindInfo[i].dwFlags; - bindInfo_x86[i].bPrecision = bindInfo[i].bPrecision; - bindInfo_x86[i].bScale = bindInfo[i].bScale; + fixed (tagDBPARAMBINDINFO* p = &bindInfo[i]) + { + bindInfo_x86[i] = (tagDBPARAMBINDINFO_x86)Marshal.PtrToStructure((IntPtr)p, typeof(tagDBPARAMBINDINFO_x86)); + } } fixed (tagDBPARAMBINDINFO_x86* p = &bindInfo_x86[0]) { From 4b7ce1eb99a06f5a73587c98e93a75b81c9e2f6f Mon Sep 17 00:00:00 2001 From: Saurabh Singh Date: Thu, 13 Feb 2020 15:52:55 -0800 Subject: [PATCH 6/9] Change to type casting instead of marshalling --- src/libraries/System.Data.OleDb/src/OleDbCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs index 63aec6c6425fb4..0e723685b48b75 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs @@ -430,7 +430,7 @@ private unsafe void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParam { fixed (tagDBPARAMBINDINFO* p = &bindInfo[i]) { - bindInfo_x86[i] = (tagDBPARAMBINDINFO_x86)Marshal.PtrToStructure((IntPtr)p, typeof(tagDBPARAMBINDINFO_x86)); + bindInfo_x86[i] = *(tagDBPARAMBINDINFO_x86*)p; } } fixed (tagDBPARAMBINDINFO_x86* p = &bindInfo_x86[0]) From 418625c6b7d491e85492800d5fe49d8c25b60b42 Mon Sep 17 00:00:00 2001 From: Saurabh Singh Date: Thu, 13 Feb 2020 15:56:15 -0800 Subject: [PATCH 7/9] Move X86 check to utilities --- src/libraries/System.Data.OleDb/src/OleDbCommand.cs | 4 +--- src/libraries/System.Data.OleDb/src/OleDb_Util.cs | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs index 0e723685b48b75..23d7124e8434ee 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs @@ -44,8 +44,6 @@ public sealed class OleDbCommand : DbCommand, ICloneable, IDbCommand private int _changeID; private int _lastChangeID; - private static readonly bool s_runningOnX86 = RuntimeInformation.ProcessArchitecture == Architecture.X86; - public OleDbCommand() : base() { GC.SuppressFinalize(this); @@ -423,7 +421,7 @@ private unsafe void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParam OleDbHResult hr; - if (s_runningOnX86) + if (ODB.IsRunningOnX86) { tagDBPARAMBINDINFO_x86[] bindInfo_x86 = new tagDBPARAMBINDINFO_x86[bindInfo.Length]; for (int i = 0; i < bindInfo.Length; i++) diff --git a/src/libraries/System.Data.OleDb/src/OleDb_Util.cs b/src/libraries/System.Data.OleDb/src/OleDb_Util.cs index 0d68b7a11d0fb4..5487ba68852fb0 100644 --- a/src/libraries/System.Data.OleDb/src/OleDb_Util.cs +++ b/src/libraries/System.Data.OleDb/src/OleDb_Util.cs @@ -687,6 +687,8 @@ internal static InvalidOperationException IDBInfoNotSupported() internal const string DbInfoKeywords = "DbInfoKeywords"; internal const string Keyword = "Keyword"; + internal static readonly bool IsRunningOnX86 = RuntimeInformation.ProcessArchitecture == Architecture.X86; + // Debug error string writeline internal static string ELookup(OleDbHResult hr) { From 7fb61b3f86819f67aff16c1a1ad10ea25b595050 Mon Sep 17 00:00:00 2001 From: Saurabh Singh Date: Thu, 13 Feb 2020 15:59:23 -0800 Subject: [PATCH 8/9] Remove duplicate code --- src/libraries/System.Data.OleDb/src/OleDbCommand.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs index 23d7124e8434ee..8bae901e054300 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs @@ -419,7 +419,7 @@ private unsafe void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParam ordinals[i] = (IntPtr)(i + 1); } - OleDbHResult hr; + IntPtr bindingPtr; if (ODB.IsRunningOnX86) { @@ -433,17 +433,19 @@ private unsafe void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParam } fixed (tagDBPARAMBINDINFO_x86* p = &bindInfo_x86[0]) { - hr = commandWithParameters.SetParameterInfo((IntPtr)bindInfo.Length, ordinals, (IntPtr)p); + bindingPtr = (IntPtr)p; } } else { fixed (tagDBPARAMBINDINFO* p = &bindInfo[0]) { - hr = commandWithParameters.SetParameterInfo((IntPtr)bindInfo.Length, ordinals, (IntPtr)p); + bindingPtr = (IntPtr)p; } } + OleDbHResult hr = commandWithParameters.SetParameterInfo((IntPtr)bindInfo.Length, ordinals, (IntPtr)bindingPtr); + if (hr < 0) { ProcessResults(hr); From 25884f7a051091c1d655d79913636f0c0af541c0 Mon Sep 17 00:00:00 2001 From: Saurabh Singh Date: Thu, 13 Feb 2020 16:16:00 -0800 Subject: [PATCH 9/9] Revert "Remove duplicate code" This reverts commit 7fb61b3f86819f67aff16c1a1ad10ea25b595050. --- src/libraries/System.Data.OleDb/src/OleDbCommand.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs index 8bae901e054300..23d7124e8434ee 100644 --- a/src/libraries/System.Data.OleDb/src/OleDbCommand.cs +++ b/src/libraries/System.Data.OleDb/src/OleDbCommand.cs @@ -419,7 +419,7 @@ private unsafe void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParam ordinals[i] = (IntPtr)(i + 1); } - IntPtr bindingPtr; + OleDbHResult hr; if (ODB.IsRunningOnX86) { @@ -433,19 +433,17 @@ private unsafe void ApplyParameterBindings(UnsafeNativeMethods.ICommandWithParam } fixed (tagDBPARAMBINDINFO_x86* p = &bindInfo_x86[0]) { - bindingPtr = (IntPtr)p; + hr = commandWithParameters.SetParameterInfo((IntPtr)bindInfo.Length, ordinals, (IntPtr)p); } } else { fixed (tagDBPARAMBINDINFO* p = &bindInfo[0]) { - bindingPtr = (IntPtr)p; + hr = commandWithParameters.SetParameterInfo((IntPtr)bindInfo.Length, ordinals, (IntPtr)p); } } - OleDbHResult hr = commandWithParameters.SetParameterInfo((IntPtr)bindInfo.Length, ordinals, (IntPtr)bindingPtr); - if (hr < 0) { ProcessResults(hr);