写在前面
如果只是为了寻求C#(尤其WPF项目)连接MySQL数据库的解决方案,请直接跳到在VSCode中使用NuGet Package Manager引用dll
或在VS中使用NuGet来引入dll(以VS2017为例)
部分
引入
之前博主在搜索VS写C#WPF项目时连接数据库的相关解答的时候没有找到合适可用的回答,在网上找到的Mysql.data 8.0.25版本的dll导入到项目的应用之后与项目原有的应用之间产生了冲突(显示标识为MySql.Data, Version=8.0.25.0, Culture=neutral, PublicKeyToken= c5687fc88969c44d的程序集MySql.Data’所使用的“System.Runtime, Version= 5.0.0.0, Culture =neutral, PublicKeyT oken= b03f5f7f11 d50a3a“版本高于所引|用的标识为System.Runtime, Version=4.1.2.0, Culture =neutral, PublicKeyToken= b03f5f7f11 d50a3a的程序集’System.Runtime")
之前博主在使用VSCode写代码的时候使用的是NuGet Package Manager拓展来添加的dll引入,于是在VS中也想试试通过NuGet来导入相关的dll引用
NuGet简介
Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。
简单一点理解就是用VS或者VSCode写C#项目的时候可以借助NuGet来添加一些拓展包
在NuGet上直接搜索所需的packages,例如MySql.data
点击右侧的DownLoad Packages下载包,但是此时下载下来的是一个nupkg后缀名的包(其实就是一个压缩包),而这个格式我们是无法直接通过导入dll的方式引入到C#项目之中的,大家可以尝试使用压缩软件打开nupkg后缀的包,在里面找到自己真正需要的dll包导入到C#项目中,但是往往是不行的。我们以MySql.data为例,仅仅导入MySql.data 8.0.25无法运行,会报一个我们上文图片中的错误,因为在VS2017或者VS2019中默认的System版本都是4.0.0的,而MySql.data 8.0.25所需的是更高版本的System配套版本。
在VSCode中使用NuGet Package Manager引用dll
在vscode拓展中搜索NuGet Package Manager,并安装
回到自己的C#项目,点击查看
——命令面板
或者直接CTRL+shift+P打开
输入NuGet package,选择NuGet package Manager:Add Package选项来添加所需的包
搜索Mysql.data选择第一个Mysql.data
选择对应的版本(与自己的MySQL数据库对应)完成下载
完成之后记得重新生成一下项目(在终端中输入dotnet restore
)
重新运行项目来测试连接MySQL数据库
(文末有连接MySQL数据库测试代码)
在VS中使用NuGet来引入dll(以VS2017为例)
点开项目的目录,右键引用,打开管理NuGet程序包
搜索所需的dll包,例如Mysql.data,选择所需的NuGet包,在右侧选择所需的版本(注意与自己的MySQL版本对应),点击安装(此处因为博主已经下载过该package所以显示的是更新按钮)
下载的时候我们可以看到,NuGet下载的不仅仅只是一个Mysql.data还有配套的许多包,这也就解释了前文我们只是导入Mysql.data的dll程序不能正常运行的情况了
完成之后记得重新生成一下项目(右键项目名点击重新生成restore)
此时项目已经可以正常的连接MySQL数据库了,如果还是不行就根据VS的提示用NuGet安装上缺少的或者版本不对应的包(与上述相同,不再赘述)
附上一段连接数据库的测试代码(注意修改为自己的数据库名称,以及账号和密码)
try
{
string str = "server=localhost;User Id=root;password=123456;Database=zjty";//连接MySQL的字符串
MySqlConnection giricon = new MySqlConnection(str);//实例化链接
giricon.Open();//开启连接
// MySqlCommand mycmd = new MySqlCommand("insert into user(userId) VALUES('c#111')", giricon);
MySqlCommand mycmd = new MySqlCommand("select * from user", giricon);
MySqlDataReader reader = mycmd.ExecuteReader();
//循环单行读取数据,当读取为null时,就退出循环
while (reader.Read())
{
//输出第一列字段值
Console.Write(reader.GetString(0) + "\t");
//判断字段"username"是否为null,为null数据转换会失败
if (!reader.IsDBNull(1))
{
//输出第二列字段值
Console.Write(reader.GetString(1) + "\t");
}
//判断字段"password"是否为null,为null数据转换会失败
if (!reader.IsDBNull(2))
{
//输出第三列字段值
Console.Write(reader.GetString(2) + "\n");
}
}
// if (mycmd.ExecuteNonQuery() > 0)
// {
// Console.WriteLine("success");
// }
// Console.ReadLine();
// giricon.Close();//关闭
}
catch (Exception ex)
{
Console.WriteLine("数据库连接异常!");
}