Unable to Connect to MariaDB from C# SqlClient on Ubuntu 22.04

74 views Asked by At

I am trying to connect to a MariaDB database from a C# Console App using [email protected] running Net7.0 on Ubuntu 22.04 .

MY CODE

using System;
using System.Data.SqlClient;

var connectionString = @"Server=192.168.1.10,3306;Database=myDatabase;User Id=omnimon;Password=myPassword;";

using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
    }

THE ERROR

Unhandled exception. System.InvalidOperationException: Internal connection fatal error.
   at System.Data.SqlClient.TdsParserStateObject.TryProcessHeader()
   at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean& marsCapable, Boolean& fedAuthRequired)
   at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover)
   at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover)
   at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
   at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
   at Program.<Main>$(String[] args) in /home/user/Projects/myProject/Program.cs:line 9

I have MariaDB listening on all ports.

user@computer-name:~$ netstat -ant | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN 

Ports are open

user@computer-name:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
3306                       ALLOW       Anywhere                  
3306/tcp                   ALLOW       Anywhere                  
3306 (v6)                  ALLOW       Anywhere (v6)             
3306/tcp (v6)              ALLOW       Anywhere (v6)

I setup my user using the following commands..

MariaDB [(none)]> CREATE USER 'omnimon'@'%' IDENTIFIED BY 'myPassword';

MariaDB [(none)]> GRANT ALL ON *.* to 'omnimon'@'%' IDENTIFIED BY 'myPassword' WITH GRANT OPTION;

I am able to connect using HeidiSQL with the same connection info.

1

There are 1 answers

0
danblack On BEST ANSWER

SqlClient seems to be for SQLServer rather than MariaDB.

You can use MySqlConnector to connect to MariaDB.