dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.28k stars 4.74k forks source link

System.Data.OleDB Error Messages not working on Spanish (Argentina) #108035

Open Cristian-Rosa opened 1 month ago

Cristian-Rosa commented 1 month ago

Description

After migrating from System.Data.OleDB 6.0.0 to 7.0.0 or greater error messages are broken on Windows with language set to Spanish Locale (Argentina). Instead it shows error codes.

Reproduction Steps

For example: System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(); try { cn.ConnectionString = "Provider=SQLOLEDB.1;Data Source=AnyWrongDS;Integrated Security=SSPI;Initial Catalog=master;Current Language=Spanish;"; cn.Open(); } catch (Exception ex) { Console.Write(ex.Message); }

Expected behavior

Exception on version 7.0.0 or greater should throw: [DBNETLIB][ConnectionOpen (Connect()).]No existe el servidor SQL Server o se ha denegado el acceso al mismo

Actual behavior

Running the code on Windows with language set to English throws: [DBNETLIB][ConnectionOpen(Connect()).] SQL server does not exist or access denied Running on Spanish language Locale (Argentina) throws: Unspecified error: E_FAIL(0x80004005) Running on Spanish (Argentina) using System.Data.OleDB 6.0.0 throws: [DBNETLIB][ConnectionOpen (Connect()).]No existe el servidor SQL Server o se ha denegado el acceso al mismo

Regression?

No response

Known Workarounds

No response

Configuration

.Net 7.0.0 or greater Windows language: Spanish

Other information

No response

dotnet-policy-service[bot] commented 1 month ago

Tagging subscribers to this area: @davoudeshtehari, @david-engel, @jrahnama See info in area-owners.md if you want to be subscribed.

dotnet-policy-service[bot] commented 1 month ago

Tagging subscribers to this area: @roji, @ajcvickers See info in area-owners.md if you want to be subscribed.

dotnet-policy-service[bot] commented 1 month ago

Tagging subscribers to this area: @roji, @ajcvickers See info in area-owners.md if you want to be subscribed.

Cristian-Rosa commented 1 month ago

Changed original post. Issue is related only with Spanish (Argentina) locale.

Issue start with 7.0.0-preview.1.22076.8 I think could be related to #61184

roji commented 1 month ago

@AaronRobinsonMSFT @jkoritzinsky @elinor-fung does it sound like #61184 could trigger this?

Cristian-Rosa commented 1 month ago

Debugged until OleDbComWrappers.GetDescription

public unsafe System.Data.OleDb.OleDbHResult GetDescription(out string? description) { IntPtr pDescription = IntPtr.Zero; int errorCode = ((delegate* unmanaged<IntPtr, IntPtr*, int>)(*(*(void***)_wrappedInstance + 5 /* IErrorInfo.GetDescription slot */))) (_wrappedInstance, &pDescription);

errorCode is taking -2147217855 value

jkoritzinsky commented 1 month ago

That error code is DB_E_NOLOCALE.

It's possible that the conversion to source-generated P/Invokes missed something. I'll take a quick look and see if I can find something that we missed.