c dbhelper类下载mysql_[C#]实现任何数据库类型的DbHelper帮助类

article/2025/10/17 0:22:44

本文章为原创内容,如需转载,请注明作者及出处,谢谢!

一、在System.Data.Common命名空间下,存在这样的一个类:

//

//摘要://表示一组方法,这些方法用于创建提供程序对数据源类的实现的实例。

public abstract classDbProviderFactory

{//

//摘要://初始化 System.Data.Common.DbProviderFactory 类的新实例。

protectedDbProviderFactory();//

//摘要://指定特定的 System.Data.Common.DbProviderFactory 是否支持 System.Data.Common.DbDataSourceEnumerator//类。//

//返回结果://如果 System.Data.Common.DbProviderFactory 的实例支持 System.Data.Common.DbDataSourceEnumerator//类,则为 true;否则为 false。

public virtual bool CanCreateDataSourceEnumerator { get; }//

//摘要://返回实现 System.Data.Common.DbCommand 类的提供程序的类的一个新实例。//

//返回结果://System.Data.Common.DbCommand 的新实例。

public virtualDbCommand CreateCommand();//

//摘要://返回实现 System.Data.Common.DbCommandBuilder 类的提供程序的类的一个新实例。//

//返回结果://System.Data.Common.DbCommandBuilder 的新实例。

public virtualDbCommandBuilder CreateCommandBuilder();//

//摘要://返回实现 System.Data.Common.DbConnection 类的提供程序的类的一个新实例。//

//返回结果://System.Data.Common.DbConnection 的新实例。

public virtualDbConnection CreateConnection();//

//摘要://返回实现 System.Data.Common.DbConnectionStringBuilder 类的提供程序的类的一个新实例。//

//返回结果://System.Data.Common.DbConnectionStringBuilder 的新实例。

public virtualDbConnectionStringBuilder CreateConnectionStringBuilder();//

//摘要://返回实现 System.Data.Common.DbDataAdapter 类的提供程序的类的一个新实例。//

//返回结果://System.Data.Common.DbDataAdapter 的新实例。

public virtualDbDataAdapter CreateDataAdapter();//

//摘要://返回实现 System.Data.Common.DbDataSourceEnumerator 类的提供程序的类的一个新实例。//

//返回结果://System.Data.Common.DbDataSourceEnumerator 的新实例。

public virtualDbDataSourceEnumerator CreateDataSourceEnumerator();//

//摘要://返回实现 System.Data.Common.DbParameter 类的提供程序的类的一个新实例。//

//返回结果://System.Data.Common.DbParameter 的新实例。

public virtualDbParameter CreateParameter();//

//摘要://返回提供程序的类的新实例,该实例可实现提供程序的 System.Security.CodeAccessPermission 类的版本。//

//参数://state://System.Security.Permissions.PermissionState 值之一。//

//返回结果://指定 System.Security.Permissions.PermissionState 的 System.Security.CodeAccessPermission//对象。

public virtualCodeAccessPermission CreatePermission(PermissionState state);

}

我们可以看到,在此类中,有很多用于创建数据库相关对象的类型,如DbConnection,DbCommand,DbDataAdapter等。

而且,实现诸如SqlConnection、SqlCommand、SqlDataAdapter(这里用的是SQL Server)的类型,都分别继承自DbConnection,DbCommand,DbDataAdapter,

因此,我们可以使用DbProviderFactory来创建我们想要的、可实现任何数据库的DbHelper。

二、实现基本的DbHelper帮助类

1、我们将DbHelper定义为抽象类,并在类中提供一个抽象可读属性,名称叫DbProviderFactory,返回类型为DbProviderFactory(注:名称与返回类型可以为一样,也可以不一样),

2、我们利用在该抽象类实现的子类中重写DbProviderFactory方法,并在子类的构造函数中为该属性赋值,该值就是已经实现了具体数据库类型的DbProviderFactory。

定义的代码参考如下:

public abstract classDbHelper

{public abstract DbProviderFactory DbProviderFactory { get; }

}

3、我们为该抽象类编写一个构造函数,传进去的参数为连接字符串,并将其存储在可读的ConnectionString字段里,代码如下:

public abstract classDbHelper

{public DbHelper(stringconnectionString)

{

ConnectionString=connectionString;

}public string ConnectionString { get; }public abstract DbProviderFactory DbProviderFactory { get; }

}

4、在DbHelper编写一些用于实现数据库相关操作的方法,这里就用到了DbProviderFactory类中的方法,以下方法仅供参考,具体请参照其他完整的DbHelp帮助类,

DbHelper完整代码如下:

//帮助类的基类(抽象类)

public abstract classDbHelper

{public DbHelper(stringconnectionString)

{

ConnectionString=connectionString;

}public abstract DbProviderFactory DbProviderFactory { get; }public string ConnectionString { get; }//以下实现的帮助类方法,仅供该例子使用,具体请参照其他完整的DbHelp帮助类

private void ThrowExceptionIfLengthNotEqual(string[] sqls, paramsDbParameter[][] parameters)

{if (parameters.GetLength(0) != 0 && sqls.Length != parameters.GetLength(0)) throw new ArgumentException($"一维数组{nameof(sqls)}的长度与二维数组{nameof(parameters)}长度的第一维长度不一致");

}private T[] Execute(string[] sqls, CommandType commandType = CommandType.Text, ExecuteMode executeMode = ExecuteMode.NonQuery, paramsDbParameter[][] parameters)

{

ThrowExceptionIfLengthNotEqual(sqls, parameters);if(executeMode == ExecuteMode.NonQuery && typeof(T) != typeof(int)) throw new InvalidCastException("使用NonQuery模式时,必须将类型T指定为int");using (DbConnection connection =DbProviderFactory.CreateConnection())using (DbCommand command =DbProviderFactory.CreateCommand())

{

connection.ConnectionString=ConnectionString;

connection.Open();

command.Connection=connection;

command.CommandType=commandType;

DbTransaction transaction=connection.BeginTransaction();

command.Transaction=transaction;try{

List resultList = new List();for (int i = 0; i < sqls.Length; i++)

{

command.CommandText=sqls[i];if (parameters.GetLength(0) != 0)

{

command.Parameters.Clear();

command.Parameters.AddRange(parameters[i]);

}object result = null;switch(executeMode)

{caseExecuteMode.NonQuery:

result= command.ExecuteNonQuery(); break;caseExecuteMode.Scalar:

result= command.ExecuteScalar(); break;default: throw newNotImplementedException();

}

resultList.Add((T)Convert.ChangeType(result,typeof(T)));

}

transaction.Commit();returnresultList.ToArray();

}catch{

transaction.Rollback();throw;

}

}

}public int ExecuteNonQuery(string sql, params DbParameter[] parameter) => ExecuteNonQuery(new string[] { sql }, new DbParameter[][] { parameter })[0];public int[] ExecuteNonQuery(string[] sqls, params DbParameter[][] parameters)=> Execute(sqls, CommandType.Text, ExecuteMode.NonQuery,parameters);public int ExecuteNonQueryWithProc(string sql, params DbParameter[] parameter) => ExecuteNonQueryWithProc(new string[] { sql }, new DbParameter[][] { parameter })[0];public int[] ExecuteNonQueryWithProc(string[] sqls, params DbParameter[][] parameters) => Execute(sqls, CommandType.StoredProcedure, ExecuteMode.NonQuery, parameters);public T ExecuteScalar(string sql, params DbParameter[] parameter) => ExecuteNonQuery(new string[] { sql }, new DbParameter[][] { parameter })[0];public T[] ExecuteNonQuery(string[] sqls, params DbParameter[][] parameters) => Execute(sqls, CommandType.Text,ExecuteMode.Scalar, parameters);public T ExecuteScalarWithProc(string sql, params DbParameter[] parameter) => ExecuteNonQuery(new string[] { sql }, new DbParameter[][] { parameter })[0];public T[] ExecuteNonQueryWithProc(string[] sqls, params DbParameter[][] parameters) => Execute(sqls, CommandType.StoredProcedure, ExecuteMode.Scalar, parameters);enumExecuteMode

{

NonQuery,Scalar

}private DataTable[] Fill(string[] selectSqls, CommandType commandType = CommandType.Text, paramsDbParameter[][] parameters)

{

ThrowExceptionIfLengthNotEqual(selectSqls, parameters);using (DbConnection connection =DbProviderFactory.CreateConnection())using (DbDataAdapter adapter =DbProviderFactory.CreateDataAdapter())using (DbCommand command =DbProviderFactory.CreateCommand())

{

connection.ConnectionString=ConnectionString;

connection.Open();

command.Connection=connection;

command.CommandType=commandType;

adapter.SelectCommand=command;

List resultList = new List();for (int i = 0; i < selectSqls.Length; i++)

{

command.CommandText=selectSqls[i];if (parameters.GetLength(0) != 0)

{

command.Parameters.Clear();

command.Parameters.AddRange(parameters[i]);

}

DataTable table= newDataTable();

adapter.Fill(table);

resultList.Add(table);

}returnresultList.ToArray();

}

}public DataTable Fill(string selectSql, params DbParameter[] parameter) => Fill(new string[] { selectSql }, new DbParameter[][] { parameter })[0];public DataTable[] Fill(string[] selectSqls, params DbParameter[][] parameters) =>Fill(selectSqls, CommandType.Text, parameters);public DataTable FillWithProc(string selectSql, params DbParameter[] parameter) => FillWithProc(new string[] { selectSql }, new DbParameter[][] { parameter })[0];public DataTable[] FillWithProc(string[] selectSqls, params DbParameter[][] parameters) =>Fill(selectSqls, CommandType.StoredProcedure, parameters);

}

三、实现具体的数据库帮助类

1、实现Sql Server的帮助类,具体方法:只要重写DbHelper类的DbProviderFactory属性并在构造函数为其赋值即可,其他的数据库帮助类亦是如此,

代码如下:

//用于Sql Server的帮助类

public classSqlClientHelper : DbHelper

{public SqlClientHelper(string connectionString) : base(connectionString)

{this.DbProviderFactory =SqlClientFactory.Instance;

}public override DbProviderFactory DbProviderFactory { get; }

}

2、参照以上,实现SQLite帮助类如下:

//用于SQLite的帮助类

public classSQLiteHelper : DbHelper

{public SQLiteHelper(string connectionString) : base(connectionString)

{

DbProviderFactory=SQLiteFactory.Instance;

}public override DbProviderFactory DbProviderFactory { get; }

}

3、其他数据库的帮助类,正如以上所说的,只要重写DbHelper类的DbProviderFactory属性并在构造函数为其赋值即可。

四、示例演示

使用前,必须引用了System.Data.SQLite,具体请参考一下文章:

编写的客户端代码,如下:

classProgram

{//客户端调用

static void Main(string[] args)

{string fileName = "Test.db";if(File.Exists(fileName)) File.Delete(fileName);

SQLiteConnection.CreateFile(fileName);

SQLiteHelper helper= new SQLiteHelper($"Data Source = {fileName}");

helper.ExecuteNonQuery("CREATE TABLE IF NOT EXISTS Info(ID integer PRIMARY KEY AUTOINCREMENT, Guid text)");

List sqlList = new List();for (int i = 0; i < 1000; i++)

{

sqlList.Add($"INSERT INTO Info VALUES(null,'{Guid.NewGuid()}')");

}

helper.ExecuteNonQuery(sqlList.ToArray());

DataTable table= helper.Fill("SELECT * FROM Info");

table.Rows.Cast().ToList().ForEach(x => Console.WriteLine($"{x[0]}\t{x[1]}"));

Console.ReadKey();

}

}

输出的结果如下:

7c848c00e98e059528bbaddca538f7dd.png

五、完整代码如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

usingSystem;usingSystem.Linq;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Data.Common;usingSystem.Data.SqlClient;usingSystem.Data.SQLite;usingSystem.IO;namespaceConsoleApp

{classProgram

{//客户端调用

static void Main(string[] args)

{string fileName = "Test.db";if(File.Exists(fileName)) File.Delete(fileName);

SQLiteConnection.CreateFile(fileName);

SQLiteHelper helper= new SQLiteHelper($"Data Source = {fileName}");

helper.ExecuteNonQuery("CREATE TABLE IF NOT EXISTS Info(ID integer PRIMARY KEY AUTOINCREMENT, Guid text)");

List sqlList = new List();for (int i = 0; i < 1000; i++)

{

sqlList.Add($"INSERT INTO Info VALUES(null,'{Guid.NewGuid()}')");

}

helper.ExecuteNonQuery(sqlList.ToArray());

DataTable table= helper.Fill("SELECT * FROM Info");

table.Rows.Cast().ToList().ForEach(x => Console.WriteLine($"{x[0]}\t{x[1]}"));

Console.ReadKey();

}

}//用于Sql Server的帮助类

public classSqlClientHelper : DbHelper

{public SqlClientHelper(string connectionString) : base(connectionString)

{this.DbProviderFactory =SqlClientFactory.Instance;

}public override DbProviderFactory DbProviderFactory { get; }

}//用于SQLite的帮助类

public classSQLiteHelper : DbHelper

{public SQLiteHelper(string connectionString) : base(connectionString)

{

DbProviderFactory=SQLiteFactory.Instance;

}public override DbProviderFactory DbProviderFactory { get; }

}//--------------------------------------------------------------------------------//其他数据库的帮助类,只要重写DbHelper类的DbProviderFactory属性并在构造函数为其赋值即可//--------------------------------------------------------------------------------//帮助类的基类(抽象类)

public abstract classDbHelper

{public DbHelper(stringconnectionString)

{

ConnectionString=connectionString;

}public abstract DbProviderFactory DbProviderFactory { get; }public string ConnectionString { get; }//以下实现的帮助类方法,仅供该例子使用,具体请参照其他完整的DbHelp帮助类

private void ThrowExceptionIfLengthNotEqual(string[] sqls, paramsDbParameter[][] parameters)

{if (parameters.GetLength(0) != 0 && sqls.Length != parameters.GetLength(0)) throw new ArgumentException($"一维数组{nameof(sqls)}的长度与二维数组{nameof(parameters)}长度的第一维长度不一致");

}private T[] Execute(string[] sqls, CommandType commandType = CommandType.Text, ExecuteMode executeMode = ExecuteMode.NonQuery, paramsDbParameter[][] parameters)

{

ThrowExceptionIfLengthNotEqual(sqls, parameters);if(executeMode == ExecuteMode.NonQuery && typeof(T) != typeof(int)) throw new InvalidCastException("使用NonQuery模式时,必须将类型T指定为int");using (DbConnection connection =DbProviderFactory.CreateConnection())using (DbCommand command =DbProviderFactory.CreateCommand())

{

connection.ConnectionString=ConnectionString;

connection.Open();

command.Connection=connection;

command.CommandType=commandType;

DbTransaction transaction=connection.BeginTransaction();

command.Transaction=transaction;try{

List resultList = new List();for (int i = 0; i < sqls.Length; i++)

{

command.CommandText=sqls[i];if (parameters.GetLength(0) != 0)

{

command.Parameters.Clear();

command.Parameters.AddRange(parameters[i]);

}object result = null;switch(executeMode)

{caseExecuteMode.NonQuery:

result= command.ExecuteNonQuery(); break;caseExecuteMode.Scalar:

result= command.ExecuteScalar(); break;default: throw newNotImplementedException();

}

resultList.Add((T)Convert.ChangeType(result,typeof(T)));

}

transaction.Commit();returnresultList.ToArray();

}catch{

transaction.Rollback();throw;

}

}

}public int ExecuteNonQuery(string sql, params DbParameter[] parameter) => ExecuteNonQuery(new string[] { sql }, new DbParameter[][] { parameter })[0];public int[] ExecuteNonQuery(string[] sqls, params DbParameter[][] parameters)=> Execute(sqls, CommandType.Text, ExecuteMode.NonQuery,parameters);public int ExecuteNonQueryWithProc(string sql, params DbParameter[] parameter) => ExecuteNonQueryWithProc(new string[] { sql }, new DbParameter[][] { parameter })[0];public int[] ExecuteNonQueryWithProc(string[] sqls, params DbParameter[][] parameters) => Execute(sqls, CommandType.StoredProcedure, ExecuteMode.NonQuery, parameters);public T ExecuteScalar(string sql, params DbParameter[] parameter) => ExecuteNonQuery(new string[] { sql }, new DbParameter[][] { parameter })[0];public T[] ExecuteNonQuery(string[] sqls, params DbParameter[][] parameters) => Execute(sqls, CommandType.Text,ExecuteMode.Scalar, parameters);public T ExecuteScalarWithProc(string sql, params DbParameter[] parameter) => ExecuteNonQuery(new string[] { sql }, new DbParameter[][] { parameter })[0];public T[] ExecuteNonQueryWithProc(string[] sqls, params DbParameter[][] parameters) => Execute(sqls, CommandType.StoredProcedure, ExecuteMode.Scalar, parameters);enumExecuteMode

{

NonQuery,Scalar

}private DataTable[] Fill(string[] selectSqls, CommandType commandType = CommandType.Text, paramsDbParameter[][] parameters)

{

ThrowExceptionIfLengthNotEqual(selectSqls, parameters);using (DbConnection connection =DbProviderFactory.CreateConnection())using (DbDataAdapter adapter =DbProviderFactory.CreateDataAdapter())using (DbCommand command =DbProviderFactory.CreateCommand())

{

connection.ConnectionString=ConnectionString;

connection.Open();

command.Connection=connection;

command.CommandType=commandType;

adapter.SelectCommand=command;

List resultList = new List();for (int i = 0; i < selectSqls.Length; i++)

{

command.CommandText=selectSqls[i];if (parameters.GetLength(0) != 0)

{

command.Parameters.Clear();

command.Parameters.AddRange(parameters[i]);

}

DataTable table= newDataTable();

adapter.Fill(table);

resultList.Add(table);

}returnresultList.ToArray();

}

}public DataTable Fill(string selectSql, params DbParameter[] parameter) => Fill(new string[] { selectSql }, new DbParameter[][] { parameter })[0];public DataTable[] Fill(string[] selectSqls, params DbParameter[][] parameters) =>Fill(selectSqls, CommandType.Text, parameters);public DataTable FillWithProc(string selectSql, params DbParameter[] parameter) => FillWithProc(new string[] { selectSql }, new DbParameter[][] { parameter })[0];public DataTable[] FillWithProc(string[] selectSqls, params DbParameter[][] parameters) =>Fill(selectSqls, CommandType.StoredProcedure, parameters);

}

}

View Code


http://chatgpt.dhexx.cn/article/34IFpeRF.shtml

相关文章

dbhelper的使用

目录 获得连接字符串引入dbhelper工具类调改dbhelper配置基本的使用 获得连接字符串 服务器资源管理器 数据连接 新建连接 完成的效果 成功获得dbok的连接 右下角&#xff0c;拿连接字符串 Data Source.;Initial Catalogdbok;Integrated SecurityTrue引入dbhelper工具类 …

Java爬虫框架WebMagic简介及使用

一、介绍 ​ webmagic的是一个无须配置、便于二次开发的爬虫框架&#xff0c;它提供简单灵活的API&#xff0c;只需少量代码即可实现一个爬虫。webmagic采用完全模块化的设计&#xff0c;功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化)&#xff0c;支持多…

一款非常牛逼的 Java 爬虫框架!(请低调使用)

关注Java核心技术&#xff0c;推送更多 Java 干货&#xff01; 介绍 平台以流程图的方式定义爬虫,是一个高度灵活可配置的爬虫平台 特性 支持Xpath/JsonPath/css选择器/正则提取/混搭提取支持JSON/XML/二进制格式支持多数据源、SQL select/selectInt/selectOne/insert/update/d…

推荐一个智能的 Java 爬虫框架

介绍 平台以流程图的方式定义爬虫,是一个高度灵活可配置的爬虫平台 特性 支持Xpath/JsonPath/css选择器/正则提取/混搭提取支持JSON/XML/二进制格式支持多数据源、SQL select/selectInt/selectOne/insert/update/delete支持爬取JS动态渲染(或ajax)的页面支持代理支持自动保存…

java爬虫框架(java爬虫框架webmagic)

Java页面框架有哪些呢&#xff1f; 主要应用技术&#xff1a;EJB等出处&#xff1a;java.sun.com/blueprints/code/index.简述&#xff1a;这是SUN在展示J2EE平台时所用的例子PetStore(宠物商店系统)里面的框架 常见的JAVA框架有什么呢&#xff1f; 基于MVC模式&#xff0c;结构…

Java爬虫框架wemgic_Java爬虫框架-WebMagic挖坑补坑指南

以前总是用的Python下的Scrapy和crawley和PHP的小众爬虫框架&#xff0c;最近突然想到了何不用下Java下的框架试试&#xff1f; 查了下Java下的爬虫框架自然也不在少数&#xff0c;Nutch,WebMagic,WebCollector,这三个绝对是够用了&#xff0c;爬一般的网站不在话下&#xff0c…

java爬虫框架哪个好_Java爬虫(二)Java爬虫框架

关于本文&#xff1a; 之前写了个Java爬虫(一)&#xff0c;拖更了很久&#xff0c;今天终于想着补上Java爬虫二了&#xff0c;今天就粗略水一期&#xff0c;给大家介绍一个比较完善的Java爬虫——WebMagic,而且它的文档写的也很详细&#xff0c;上手非常容易。 ——野狗菌【希望…

java爬虫框架—WebMagic

什么是网络爬虫 从功能上来讲&#xff0c;爬虫一般分为数据采集&#xff0c;处理&#xff0c;储存三个部分。爬虫从一个或若干初始网页的URL开始&#xff0c;获得初始网页上的URL&#xff0c;在抓取网页的过程中&#xff0c;不断从当前页面上抽取新的URL放入队列,直到满足系统…

java爬虫框架哪个好_java爬虫框架的使用

原标题&#xff1a;java爬虫框架的使用 随着互联网的发展&#xff0c;编程程序语言也开始被越来越多的人所掌握&#xff0c;但是自始至终&#xff0c;java语言一直是被使用范围最广的编程语言。今天&#xff0c;武汉中软国际主要给大家讲解的是java语言中的爬虫java框架结构是怎…

Java爬虫框架WebMagic

WebMagic的架构设计参照了Scrapy&#xff0c;而实现则应用了HttpClient、Jsoup等Java成熟的工具。 WebMagic由四个组件(Downloader、PageProcessor、Scheduler、Pipeline)构成: Downloader : 下载器PageProcessor: 页面解析器Scheduler&#xff1a; 任务分配、url去重Pipelin…

Java爬虫框架之WebMagic的学习总结

Java爬虫框架之WebMagic WebMagic概述特性架构四大组件数据流转对象控制爬虫运转的引擎Spider WebMagic的基本使用添加WebMagic的核心与扩展依赖爬虫实现 爬虫的编写过程实现PageProcessor爬虫配置抽取页面元素链接的发现 Selectable抽取元素抽取部分API获取结果的API 使用Pipe…

Java爬虫(三)-- 爬虫框架WebMagic的使用(以csdn页面为例)

一、WebMagic介绍 WebMagic是当前比较主流的一款Java爬虫框架。WebMagic项目代码分为核心和扩展两部分。核心部分(webmagic-core)是一个精简的、模块化的爬虫实现&#xff08;这部分提供非常简单、灵活的API&#xff0c;在基本不改变开发模式的情况下&#xff0c;编写一个爬虫…

JAVA爬虫框架

WebMagic框架 webmagic结构分为Downloader,pageProcessor,Scheduler,pipeline四大组件 并由splider将他们组织起来 这四大组件对应着爬虫生命周期中的下载 处理 管理 和持久化等功能,依赖 <dependency><groupId>org.springframework.boot</groupId>&l…

一款非常牛逼的Java爬虫框架(高度灵活可配置)

点击关注公众号&#xff0c;利用碎片时间学习 介绍 平台以流程图的方式定义爬虫,是一个高度灵活可配置的爬虫平台 特性 支持Xpath/JsonPath/css选择器/正则提取/混搭提取支持JSON/XML/二进制格式支持多数据源、SQL select/selectInt/selectOne/insert/update/delete支持爬取JS动…

svn 图标不显示 window10

今天打开电脑&#xff0c;同步代码的时候&#xff0c;发现&#xff0c;所有的目录svn的图标都不显示了。 早在几年前遇到过一次&#xff0c;通过clear可以恢复&#xff0c;可是这次几次clear也不管用。 然后&#xff0c;果断打开svn的设置。找到图标的设定。 设定如下&#…

win10 SVN图标不显示 已解决

原因&#xff1a; SVN的图标的排位顺序排在下面去了&#xff0c;导致其它图标占用了它的位置&#xff0c;也就是需要把Tortoise的位置提到上面来 解决办法&#xff1a; winR&#xff0c;输入regedit进入注册表 ctrlf搜索ShellIconOverlayIdentifiers&#xff08;这里需要一会…

SVN文件夹不显示图标解决方法

从svn服务器上将文件夹导出到本地文件之后&#xff0c;svn相关文件夹没有显示相应的图标&#xff0c;解决方法如下。对于SVN来说&#xff0c;因为每个图标都代表着不同的含义&#xff0c;预示着不同的状态&#xff0c;是指示灯的作用&#xff0c;如果没有正确的图标很可能造成数…

win10 SVN 图标不显示的解决办法

win10 SVN 图标不显示的解决办法 前言一、进入注册表二、设置文件名三、重启四、检查五、原理 前言 项目关联到 SVN 之后&#xff0c;一般情况下会有各种各样的状态图标。用来标注本地与 SVN 版本异同情况。但是有时候看不到示意图标&#xff0c;今天记录一下解决办法。 一、…

svn图标没有显示的解决办法

解决办法&#xff1a; 1.打开注册表 键盘输入winr 运行&#xff0c;打开 regedit 2.修改注册表 打开注册表的如下路径&#xff0c;将前几个名字重命名&#xff0c;把名字前面的空格去掉&#xff0c;修改完成后&#xff0c;重启电脑即可。 \HKEY_LOCAL_MACHINE\SOFTWARE\Micr…

SVN、GIT图标不显示解决方案

1、WIN R打开 “运行”&#xff0c;输入"regedit"&#xff0c;打开注册表&#xff0c;然后复制下面的地址到地址栏&#xff0c;如下&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers如上图…