how to connect c# to a localhost mysql database?

snfmanutz

New member
Joined
Jun 4, 2021
Messages
2
Programming Experience
10+
, i have used vs & mysql but now i'm lost.. I have looked online but the examples dont work on my machine (windows 10 running VS2019.

I have placed the using statements
C#:
using MySql.Data;
using MySql.Data.MySqlClient;

in my code but that doesnt resolve ..... OdbcCommand command = new OdbcCommand(queryString);

help below is a piece of code i copied from the internet. the compiler gives me errors on the using statement.
i added the commenting-out .
C#:
/* ======================================================
using System;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace localdb
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            InsertRow(@"localhost/mydb");
        }

        static void InsertRow(string connectionString)
        {
            string queryString =
                "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')";

            OdbcCommand command = new OdbcCommand(queryString);

            using (OdbcConnection connection = new OdbcConnection(connectionString))
            {
                command.Connection = connection;
                connection.Open();
                command.ExecuteNonQuery();

                // The connection is automatically closed at
                // the end of the Using block.
            }
        }
    }
}
======================================================
 */
 
Last edited by a moderator:

Skydiver

Staff member
Joined
Apr 6, 2019
Messages
3,122
Location
Chesapeake, VA
Programming Experience
10+
What error are you getting?
 

Skydiver

Staff member
Joined
Apr 6, 2019
Messages
3,122
Location
Chesapeake, VA
Programming Experience
10+
below is a piece of code i copied from the internet.
Goes to show you that you shouldn't blindly copy code from the internet without understanding what it does.

Anyway, if you are using things from the "System.Data.Odbc" namespace, you should either fully qualify those things with the full namespace, or use the using like you did for lines 3-4, but for the ODBC namespace rather than the My SQL namespace.
 

snfmanutz

New member
Joined
Jun 4, 2021
Messages
2
Programming Experience
10+
ok i eliminated the usings for 'mysql." and substituted a 'using system.data.odbc' and got ...

Error CS1069 The type name 'OdbcCommand' could not be found in the namespace 'System.Data.Odbc'. This type has been forwarded to assembly 'System.Data.Odbc, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' Consider adding a reference to that assembly. localdb C:\#vs\localdb\Program.cs 21 Active

so i changed the using SysTem.Data.Odbc to
using System.Data.Odbc, Version=4.0.2.0, Culture=neutral, PublicKeyToken = cc7b13ffcd2ddd51;

and got ... CS1002: ; expected
i can see the ; ... why can't 'it'

I dont blindly download code. I am a good programmer but not a good 'bundler'.
 

Skydiver

Staff member
Joined
Apr 6, 2019
Messages
3,122
Location
Chesapeake, VA
Programming Experience
10+
The error:
C#:
Error CS1069 The type name 'OdbcCommand' could not be found in the namespace 'System.Data.Odbc'. This type has been forwarded to assembly 'System.Data.Odbc, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' Consider adding a reference to that assembly.
is telling you to add a reference to "System.Data.Odbc" in your project.

Just leave your using System.Data.Odbc; alone. In your Project settings, add a reference to "System.Data.Odbc".
 

Skydiver

Staff member
Joined
Apr 6, 2019
Messages
3,122
Location
Chesapeake, VA
Programming Experience
10+
I am a good programmer but not a good 'bundler'.
A good programmer reads the documentation. The documentation for OdbcCommand, and says:
Namespace: System.Data.Odbc
Assembly: System.Data.Odbc.dll
right near the top. That would have told you that you need to include the namespace "System.Data.Odbc", and that you needed to ensure that you have a reference to "System.Data.Odbc.dll".
 

Sheepings

Well-known member
Joined
Sep 5, 2018
Messages
2,038
Programming Experience
10+
P1/#4 should be split along with all replies below it to a new topic, as it has nothing to do with the opening topic and it will only cause confusion. Original topic should then be closed.

OP - You can not just add a using statement to your file and expect it to work. You need to add a reference to the library you are using. Add references in the Reference Manager - Visual Studio
 

Sheepings

Well-known member
Joined
Sep 5, 2018
Messages
2,038
Programming Experience
10+
Sigh...

If you are using MySQL, then you use a MySQL command and no other. Same applies for the connection type...

Do you eat soup with a fork? Do you butter your bread with chopsticks? Do you eat spaghetti with a spoon?

below is a piece of code i copied from the internet.
I have no sympathy for you. You take code from the net, and use it without knowing what it does and then ask why it doesn't work...
 

jim murray

New member
Joined
Jun 4, 2021
Messages
2
Programming Experience
10+
i dont use the net like that. I use it to get examples of a problem i am trying to solve. When i copy the code into my c# development i am looking to solve a problem that i have. Dont you learn from others? Here is an 'answer' that i got from your site ...

is telling you to add a reference to "System.Data.Odbc" in your project.

Just leave your using System.Data.Odbc; alone. In your Project settings, add a reference to "System.Data.Odbc".


What does the using do if not referencing a namespace?
 

Skydiver

Staff member
Joined
Apr 6, 2019
Messages
3,122
Location
Chesapeake, VA
Programming Experience
10+
using in C# is different from using in MSVC's C++.

In C#, the using just tells the compiler what namespaces to look into to try to resolve symbols in. So instead of having to write with fully qualified names:
C#:
void Main()
{
    System.Data.Odbc.OdbcConnection connection = new System.Data.Odbc.OdbcConnection(connectionString);
}

you can save on the typing by using using:
C#:
using System.Data.Odbc;

void Main()
{
    OdbcConnection connection = new OdbcConnection(connectionString);
}

What effectively happens is that the types in that namespace "System.Data.Odbc" are loaded into the compiler's context. But that's all it will do. using will not tell the compiler that "System.Data.Odbc.dll" needs to be added to the list of libraries that it should link in.

In MSVC's C++, the using does what you are expecting. It tells the compiler to add the referenced library to the list of libraries that need to be linked in, as well as, imports the types into the compiler's context.
 

Sheepings

Well-known member
Joined
Sep 5, 2018
Messages
2,038
Programming Experience
10+
And you are who?

If you have 10 years experience, then you wouldn't be looking up jazz on the net, because most of your knowledge will be gained through wisdom and your own experience.

Do I learn from other people? No not really.

I do make mistakes sometimes, and if someone is kind enough to correct me, then I learn from that. (Its a rarity.) But I don't scour the net looking for code to build my apps. I also don't use the net to troubleshoot bad code I've written. Writing good code comes with experience. That is also what documentation is for. And If I was using MySQL in a project, then I would be using the correct DLL's and connectors for that project. (A frequenter of MySQL, I am also a MySQL administrator.). Writing a using statement does not give you "magic" access to the library who's using directive you typed. It will only let you use that using directive providing you've loaded in the assemblies for the referenced using directive.

I would also not be mixing up OdbcCommand for MySqlCommand's and the same applies to connections and permeameters or any other object specific to the referenced libs.
 

jim murray

New member
Joined
Jun 4, 2021
Messages
2
Programming Experience
10+
And you are who?

If you have 10 years experience, then you wouldn't be looking up jazz on the net, because most of your knowledge will be gained through wisdom and your own experience.

Do I learn from other people? No not really.

I do make mistakes sometimes, and if someone is kind enough to correct me, then I learn from that. (Its a rarity.) But I don't scour the net looking for code to build my apps. I also don't use the net to troubleshoot bad code I've written. Writing good code comes with experience. That is also what documentation is for. And If I was using MySQL in a project, then I would be using the correct DLL's and connectors for that project. (A frequenter of MySQL, I am also a MySQL administrator.). Writing a using statement does not give you "magic" access to the library who's using directive you typed. It will only let you use that using directive providing you've loaded in the assemblies for the referenced using directive.

I would also not be mixing up OdbcCommand for MySqlCommand's and the same applies to connections and permeameters or any other object specific to the referenced libs.

Here is what I needed to do ...
add these three lines to my "program.csproj" file ...

<ItemGroup>
<PackageReference Include="MySql.Data" Version="8.0.25" />
</ItemGroup>

Now it compiles and the errors i get are my own.
How did i find this ...
via the internet of course!

Thanks for your time.
i appreciate your help.

jim murray
programming for 60+ years and still learning
 

Sheepings

Well-known member
Joined
Sep 5, 2018
Messages
2,038
Programming Experience
10+
OP - You can not just add a using statement to your file and expect it to work. You need to add a reference to the library you are using. Add references in the Reference Manager - Visual Studio
I did tell you that already. Frankly, if you are programming that long, I'd expect you to know how to add references through the interface or manually.

In any respect. at least you got some of it working. I suggest you brush up on the MySQL documentation for C#.
 
Last edited:
Top Bottom