MySQL Connection from an IoT Edge Module - c#

I use my machine as a simulated device.
I deployed a docker image as a module to the device where I want to connect to a MySQL instance.
But I have the following error:
Unable to connect to any of the specified MySQL hosts.
I build the connection like this:
public static MySqlConnection BuildConnection(MySqlProperties parameters)
{
MySqlConnectionStringBuilder connString = new MySqlConnectionStringBuilder();
connString.Server = parameters.Server;
connString.Database = parameters.Database;
connString.UserID = parameters.Username;
connString.Password = parameters.Password;
connString.Add("Allow User Variables", true);
var connection = new MySqlConnection(connString.ToString());
return connection;
}
and then execute
var conn = BuildConnection(props);
Console.WriteLine("opening connection to mysql ...");
conn.Open();
Console.WriteLine("Connection state: " + conn.State);
Is it possible to connect to that database ?

The issue was that MySQL wasn't configured for remote connections.

I'm about to get deep in this topic. As far as my understandings are, this error is expected, because you have to install the MySQL server as a module on the Edge run-time.
This Microsoft documentation provides instructions on storing data on the Edge with SQL Server. It is written that the same should work for MySQL, as well.

Related

:'Unable to connect to any of the specified MySQL hosts.' error

I want to connect to a MySQl db using a connection string but unable to connect
I'm using UWP and using The fall creator version for both target and min version
I've installed the Nuget packages for Mysql connector
I've tried to change the string with and without port,ect.
public string GetMatchCode()
{
string connectString = "Server=###.###.###.###;Database=Db;Uid=root;Pwd=123;sslmode=none;port=3306";
string sql = "SELECT * FROM `customer`";
using (var connect = new MySqlConnection(connectString))
using (var command = new MySqlCommand(sql, connect))
{
connect.Open();
return command.ExecuteScalar().ToString();
}
}
MySql.Data.MySqlClient.MySqlException: 'Unable to connect to any of the specified MySQL hosts.'
MySqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
The error starts at connect.Open();
I've tested the connection with workbench to make sure it's working.
I've looked through most similar post but none have worked for me.
There could many possible scenario's where connection will fail.
Please see below points to troubleshoot your error.
Check your Windows Firewall to ensure that server has an access to Port's associated with your MySql.
Disconnect and re-connect your VPN client.
Follow standard Spacing and Order of parameters in connection string. Follow below format to build/form connection string.
Server=ServerAddress; Port=4563; Database=DataBaseName; Uid=UserName;
Pwd=Password;
Consider using Connection Pulling, So existing connection will be reused.

connection to MySql database on host

I have a problem regarding connecting to my database that is located on my website host server. I have watched few tutorials, took a look on few articles here on stack overflow and read official mysql documentation, and i steel can't connect to it thru my c# console app. This is my code:
string connstring = string.Format("Server=www.vm-consult.com; Database=vmconsul_sitedatabase; Uid=vmconsul_mijovicpetar; Pwd=mypassword");
MySqlConnection connection = new MySqlConnection();
connection.ConnectionString = connstring;
connection.Open();
I have also went to c panel in remote MySQL tab and set "%" to my remote sql hosts.
All the parameters for con string are correct. In server in connection string I also tried to set IP address, did not change anything.
This is exception I get(on the last line: connection.open()):
Unable to connect to any of the specified MySQL hosts.
Any suggestions appreciated. Thanks.
Check connectivity with
telnet www.vm-consult.com 3306
I needed to contact my host provider to enable external connection to the database. Thanks everybody.

Sql connection string via SqlClient

I have an issue trying to manually connect to a sql server on my network.
I have a web API with a conn string that works fine, I have a VS2015 winforms project i set up to test the conn using the VS tool to connect, this also works fine.
However when i try to connect via SQLconnection it fails and says the server cannot be found or isnt accessable.
So heres the test code...
string connectionString = #"Data Source=test1\test1;Initial Catalog=my_test;Integrated Security=True;";
using (SqlConnection connection =
new SqlConnection(connectionString))
{
// Create the Command and Parameter objects.
SqlCommand command = new SqlCommand("", connection);
// Open the connection in a try/catch block.
// Create and execute the DataReader, writing the result
// set to the console window.
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("\t{0}\t{1}\t{2}",
reader[0], reader[1], reader[2]);
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
Now i dont really care about results or anything i simply need to establish a connection. I cant figure out why it throws this error, when my Web API works and the VS tool for connection to DBs works fine too.
I have checked the server and enabled named pipes too just to make sure.
Any ideas?
EDIT:The error i catch...
{"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)"}
happens after about 15 seconds trying to open the connection.
The thing is this connectiin string i tried is the exact same string used via the SQL tool, I did this so i knew i had a valid string.
ODBC connection also falls over with the same message.
I checked from my machinbe is i can listen to port 1433 but it says the server isnt listening.
However looking at the server its set to dynamic ports with a range of any to 41934, so im at a loss as to why it says its not listening evenb though its to dynamic ports
EDIT2: Well, must be permissions or drivers... just tried the exact same code and worked instantly...
This is diving into the realm of the unknown i feel. might ask for deletion of the question if no solution is found
I think that i see the problem:
string connectionString = #"Data Source=test1\test1;Initial Catalog=my_test;Integrated Security=True;";
Integrated Security is used for local logins, You could make an account in the database and change the connection string to:
string connectionString = #"Data Source=test1\test1;Initial Catalog=my_test;User id=<Username>;Password=<Password>;";
I hope this helps!

Visual Studio connects to database, but application within using the same connection string cannot

Using SSMS and Visual Studio 2015's Server Explorer tab under Data Connections, I can execute queries on remote server KOSH without issue. Why is the MVC application running locally in Visual Studio/IIS Express unable to do the same?
Using VS2015's connection Properties, I get its connection string:
Data Source=123.456.78.9;Persist Security Info=True;User ID=Foo;Password=Bar
Using that connection string, the MVC application is greeted with:
"A network-related or instance-specific error occurred while
establishing a connection to SQL Server. The server was not found or
was not accessible. Verify that the instance name is correct and that
SQL Server is configured to allow remote connections. (provider: Named
Pipes Provider, error: 40 - Could not open a connection to SQL
Server)"
Inner exception message:
"The network path was not found"
I know the server/firewall/network settings are correct. That leaves the application.
using(var connection = Database.Connection(conInfo.ConnectionString, provider)) {
// rowCountSql: SELECT SUM(rows) TM_ROWCOUNT FROM sys.partitions
// WHERE object_id = object_id(#tableName) and index_id IN (0,1)
// Any other SQL yields same error
var countTask = connection.QueryAsync(rowCountSql, new { tableName = Editor.TableName });
}
Async is used because the Oracle version of the query can take several seconds to return.
The application should be correct because it connects to the same server from home (also the server's location) and to identical databases in remote data centers running 2008R2 to 2014 without a problem.
Database.Connection() is:
// This is unlikely to be the problem as it is very well tested
public static DbConnection Connection(string connectionString, string databaseProvider) {
DbProviderFactory databaseFactory = DbProviderFactories.GetFactory(databaseProvider);
DbConnection connection = databaseFactory.CreateConnection();
if(connection != null)
connection.ConnectionString = connectionString;
return connection;
}
I bet I am missing something simple, but I would be grateful for help on what that could be.
As I said in comments, maybe the piece of your code:
conInfo.ConnectionString
does not contains the correct connection string you want.
Check it out

OleDBConnection error Database Server Not Found C#

I'm trying to connect to a remote SQL Anywhere 10 database server using the following connection string but receiving a "Database Server Not Found" error.
OleDbConnection conn = new OleDbConnection("Provider=SAOLEDB.10;ENG=dental;DBN=dentserv;
LINKS=tcpip(host=192.168.1.100,PORT=2638);
Integrated Security = True; User ID = dba; PWD = sql");
Using the same code, I can connect to a local database that is setup the same way as the remote server I'm attempting to connect to without any issue:
OleDbConnection conn = new OleDbConnection("Provider=SAOLEDB.10;Data Source = dental;
Database=dental;Integrated Security = True; User ID = dba; PWD = sql");
I've added and removed multiple variables within the string to troubleshoot to see if there was anything missing (ENG instead of Data Source, with and without DBN, DSN, etc.), most seem to be interchangeable but always throwing the same error of no server.
For some additional information, I am able to connect to this server database using a different database management tool using the same port IP credentials with no issue. It's Database URL is: jdbc:sybase:Tds:192.168.1.100:2638?ServiceName=
Connection String:
DBN=DENTSERV;DSN=DENTAL;UID=DBA;PWD=SQL
Any thoughts? I've been working on this for awhile with no further progress. Any insight will be much appreciated!
The host (host=192.168.1.100); appears to be a private IP (IP for your local network), you cant use that for remote access you may use a Public IP also the server need to be configured for remote access.

Categories

Resources