c#抓取网页数据(.data8.0.25.NET项目的应用之间产生了冲突 )
优采云 发布时间: 2021-12-23 05:15c#抓取网页数据(.data8.0.25.NET项目的应用之间产生了冲突
)
写在前面
如果你只是在寻找C#(尤其是WPF项目)连接MySQL数据库的解决方案,请直接跳到使用NuGet包管理器在VSCode中引用dll或NuGet在VS中导入dll的部分(以VS2017为例) )
介绍
之前博主在VS中编写C#WPF项目时,在搜索数据库相关答案时,没有找到合适的答案。将网上找到的Mysql.data 8.0.25 版本的dll 导入到项目中 项目的应用程序与项目的原创应用程序发生冲突(显示为MySql.Data, Version=8.0.25.0, Culture=neutral, PublicKeyToken= c5687fc88969c44d “System.Runtime, Version= 5.0.0. 0, Culture =neutral, PublicKeyT oken= b03f5f7f11 d50a3a" 程序集MySql.Data'使用的版本高于引用的版本|使用标识为System.Runtime, Version=4.1.2.0, Culture =neutral, PublicKeyToken= b03f5f7f11 d50a3a assembly'System.
之前博主在使用VSCode写代码的时候,使用了NuGet Package Manager扩展来添加dll导入,所以在VS中,我也想尝试通过NuGet来导入相关的dll引用
NuGet 简介
Nuget是.NET平台下的一个开源项目,是Visual Studio的扩展。在使用 Visual Studio 开发基于 .NET Framework 的应用程序时,Nuget 可以更快速、更方便地添加、删除和更新项目中的引用。
一个简单的理解就是在用VS或者VSCode写C#项目的时候,可以使用NuGet来添加一些扩展包
NuGet官网
直接在NuGet上搜索需要的包,比如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 包管理器引用 dll
在vscode扩展中搜索NuGet Package Manager并安装
回到自己的C#项目,点击查看-命令面板或者直接打开CTRL+shift+P
进入NuGet包,选择NuGet包管理器:添加包选项添加需要的包
搜索Mysql.data选择第一个Mysql.data
选择对应版本(对应自己的MySQL数据库)即可完成下载
完成后记得重新生成项目(在终端输入dotnet restore)
重新运行项目,测试连接MySQL数据库
(文末有连接MySQL数据库的测试代码)
在VS中使用NuGet导入dll(以VS2017为例)
点击打开项目目录,右键引用,打开管理NuGet包
搜索需要的dll包,比如Mysql.data,选择需要的NuGet包,在右侧选择需要的版本(注意对应自己的MySQL版本),点击安装(这里因为博主已经下载了包所以显示更新按钮)
下载的时候可以看到NuGet不仅下载了一个Mysql.data,还下载了很多配套的包。这也解释了上一篇我们刚刚导入的Mysql.data的dll程序无法正常运行的情况。
完成后记得重新生成项目(右键项目名称,点击regenerate 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("数据库连接异常!");
}