百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

达梦数据库-常用SQl整理笔记 达梦数据库用法

liebian365 2024-10-28 17:15 22 浏览 0 评论

查询版本号

SELECT
	BANNER
FROM
	V$VERSION
WHERE
	BANNER LIKE 'DM Database%'

查询实例信息

select '版本' as 名称,SVR_VERSION as 信息 from v$instance union all
select '数据库名' as 名称,CUR_DATABASE() union all
select '实例名',INSTANCE_NAME from v$instance union all
select '永久魔术值',to_char(PERMANENT_MAGIC()) union all
select '簇大小',SF_GET_EXTENT_SIZE ()||'页' union all
select '页大小',PAGE()/1024||'K' union all
select '字符集',DECODE(UNICODE,'0','GB18030','1','UTF-8','2','EUC-KR') union all
select '大小写',DECODE(SF_GET_CASE_SENSITIVE_FLAG,'0','不敏感','1','敏感') union all
select '空格填充',DECODE(BLANK_PAD_MODE,'0','否','1','是') union all
select '日志大小',MAX(RLOG_SIZE/1024/1024)||'MB' from v$rlogfile union all
select '归档状态',DECODE(ARCH_MODE,'Y','启用','N','未启用') from v$database union all
select '创建时间', cast(CREATE_TIME as varchar(50)) from v$database;

查询当前会话 id

SELECT SESSID ();

查询当前登录用户 id

SELECT UID();

查询会话信息

SELECT
	SESS_ID AS "会话ID",
	DECODE(STATE,
	'CREATE',
	'创建',
	'STARTUP',
	'启动',
	'IDLE',
	'空闲',
	'ACTIVE',
	'活动',
	'WAIT',
	'等待',
	'UNKNOWN',
	'未知') AS "会话状态",
	CREATE_TIME AS "会话创建时间",
	TRX_ID AS "事务ID",
	SQL_TEXT AS "SQL",
	USER_NAME AS "当前用户",
	CURR_SCH AS "当前模式",
	CLNT_TYPE AS "连接类型",
	DECODE(AUTO_CMT,
	'Y',
	'是',
	'N',
	'否') AS "是否自动提交",
	DECODE(DDL_AUTOCMT,
	'Y',
	'是',
	'N',
	'否') AS "DDL是否自动提交",
	APPNAME AS "连接程序名",
	CLNT_IP AS "客户机IP",
	CLNT_HOST AS "客户机名",
	OSNAME AS "客户机系统"
FROM
	V$SESSIONS;

杀掉会话

--根据SESS_ID杀掉会话
SP_CLOSE_SESSION(157792223); 

统计会话信息

SELECT
	STATE AS 状态,
	CLNT_IP AS 连接IP,
	COUNT(*)AS 数量
FROM
	V$SESSIONS
GROUP BY
	STATE,
	CLNT_IP

查询锁信息

SELECT
	ADDR AS "锁地址",
	TRX_ID AS "所属事务ID",
	LTYPE AS "锁类型",
	LMODE AS "锁模式",
	DECODE(BLOCKED,
	'1',
	'是',
	'0',
	'否') AS "是否阻塞",
	TABLE_ID AS "对应表锁ID",
	ROW_IDX AS "TID锁事务ID"
FROM
	V$LOCK;

查询发生死锁的历史记录

SELECT
	SESS_ID AS "会话ID",
	TRX_ID AS "事务ID",
	SQL_TEXT AS "产生死锁的SQL",
	HAPPEN_TIME AS "死锁发生时间"
FROM
	V$DEADLOCK_HISTORY;

查询用户列表

SELECT
	TABLESPACE_NAME,
	TABLE_NAME
FROM
	USER_TABLES

查询系统所有表

SELECT
	OWNER,
	TABLE_NAME
FROM
	ALL_TABLES;

查询是否开启归档日志

SELECT
	ARCH_MODE
FROM
	V$DATABASE;

查询有效归档日志中最小的更改编号

SELECT
	MIN(FIRST_CHANGE#) 
FROM
	V$ARCHIVED_LOG
WHERE
	ARCHIVED = 'YES'
	AND DELETED = 'NO'
	AND STATUS = 'A'

查询有效归档日志中最大的更改编号

SELECT
	MAX(NEXT_CHANGE#)
FROM
	V$ARCHIVED_LOG
WHERE
	NAME IS NOT NULL
	AND ARCHIVED = 'YES'
	AND STATUS = 'A'

查询所有可用的归档日志文件

SELECT
	A.NAME AS FILE_NAME,
	A.FIRST_CHANGE# FIRST_CHANGE,
	A.NEXT_CHANGE# NEXT_CHANGE,
	'YES',
	NULL,
	'ARCHIVED',
	A.SEQUENCE# AS SEQ,
	A.DICTIONARY_BEGIN,
	A.DICTIONARY_END
FROM
	V$ARCHIVED_LOG A
WHERE
	A.NAME IS NOT NULL
	AND A.ARCHIVED = 'YES'
	AND A.STATUS = 'A'
	AND A.NEXT_CHANGE# > 618083584
ORDER BY
	7

这边sql 中过滤掉了 SCN 小于的 618083584 的记录

删除归档日志

--保留30天归档
SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE - 30);

查询归档日志详情

SELECT
	*
FROM
	SYS."V$ARCHIVED_LOG";

查询下一个redo日志序列号

SELECT
	NEXT_SEQ
FROM
	V$RLOG;

查询当前redo 日志序列号

SELECT
	NEXT_SEQ -1
FROM
	V$RLOG;

如何判断 redo 日志发生切换

两次查询当前的 redo日志序列号,如果两次结果不一样,则说明redo日志发生了切换。

查询redo文件信息

SELECT
	CLIENT_PATH AS "日志名",
	PATH AS "路径",
	(RLOG_SIZE / 1024 / 1024) AS "文件大小M",
	CREATE_TIME AS "创建时间"
FROM
	V$RLOGFILE;

查询redo日志详情

SELECT
	CKPT_LSN,
	FILE_LSN,
	FLUSH_LSN,
	CUR_LSN,
	NEXT_SEQ,
	N_MAGIC,
	DB_MAGIC,
	FLUSH_PAGES,
	FLUSHING_PAGES,
	CUR_FILE,
	CUR_OFFSET,
	CKPT_FILE,
	CKPT_OFFSET,
	FREE_SPACE,
	TOTAL_SPACE,
	SUSPEND_TIME,
	UPD_CTL_LSN,
	N_RESERVE_WAIT,
	TOTAL_FLUSH_PAGES,
	TOTAL_FLUSH_TIMES,
	TOTAL_ECPR_FLUSH_PAGES,
	GLOBAL_NEXT_SEQ,
	N_PRIMAY_EP,
	PRIMARY_DB_MAGIC,
	CKPT_N_PRIMAY_EP,
	CKPT_PRIMARY_DB_MAGIC,
	MIN_EXEC_VER,
	MIN_DCT_VER
FROM
	V$RLOG

查询所有表行数

SELECT
	TABLE_NAME AS 表名,
	OWNER AS 所属用户,
	TABLESPACE_NAME AS 所属表空间,
	NUM_ROWS AS 行数
FROM
	DBA_TABLES
WHERE
	OWNER NOT IN ('SYS', 'SYSTEM', 'SYSAUDITOR', 'SYSJOB', 'SYSSSO', 'CTISYS')
	AND TABLESPACE_NAME != 'TEMP';

查询模式下所有表行数

SELECT
	OWNER,
	TABLE_NAME,
	NUM_ROWS,
	TABLESPACE_NAME
FROM
	DBA_TABLES T
WHERE
	T.OWNER = UPPER('TEST');

统计各个模式下表数据量

SELECT
	OWNER,
	SUM(NUM_ROWS)
FROM
	DBA_TABLES
GROUP BY
	OWNER;

查询模式下各个表索引

SELECT
	TABLE_OWNER AS "表归属",
	TABLE_NAME AS "表名",
	OWNER AS "索引归属",
	INDEX_NAME AS "索引名",
	INDEX_TYPE AS "索引类型",
	TABLESPACE_NAME AS "索引所在表空间",
	JOIN_INDEX AS "是否组合索引",
	DECODE(VISIBILITY,
	'VISIBLE',
	'可见',
	'INVISIBLE',
	'不可见') AS "索引是否可见"
FROM
	DBA_INDEXES
WHERE
	OWNER = 'TEST'

其中 TEST是具体的模式名称

查询模式下有哪些表

SELECT
	NAME AS "表名"
FROM
	SYSOBJECTS
WHERE
	SUBTYPE$ = 'UTAB'
	AND SCHID IN (
	SELECT
		A.ID
	FROM
		SYSOBJECTS A,
		ALL_USERS B
	WHERE
		A.TYPE$ = 'SCH'
		AND A.PID = B.USER_ID
		AND A.NAME = 'TEST');

其中 TEST是具体的模式名称

查询模式下表的总数量

SELECT
	count(*)
FROM
	all_all_tables
WHERE
	owner = 'TEST';

其中 TEST是具体的模式名称

查询当前用户下有哪些模式

SELECT
	A.NAME AS "模式名",
	A.ID AS "模式ID"
FROM
	SYSOBJECTS A,
	ALL_USERS B
WHERE
	A.TYPE$ = 'SCH'
	AND A.PID = B.USER_ID;

查询所有用户信息

SELECT
	USER_ID AS "用户ID",
	USERNAME AS "用户名",
	ACCOUNT_STATUS AS "状态",
	DEFAULT_TABLESPACE AS "默认表空间",
	CREATED AS "创建时间",
	LOCK_DATE AS "锁定开始时间",
	EXPIRY_DATE AS "密码有效期截止"
FROM
	DBA_USERS;

查询表结构信息

-- 查看TEST模式下TEST_TABLE表的结构
SELECT
	TABLEDEF('TEST', 'TEST_TABLE')
FROM
	DUAL;

查询数据库实例信息

SELECT
	B.SVR_VERSION AS "数据库版本",
	C.DB_MAGIC AS "数据库MAGIC",
	A.NAME AS "数据库名",
	B.INSTANCE_NAME AS "实例名",
	B.STATUS$ AS "系统状态",
	B.MODE$ AS "模式",
	DECODE(A.ARCH_MODE,
	'Y',
	'是',
	'N',
	'否') AS "是否归档",
	B.START_TIME AS "服务启动时间"
FROM
	V$DATABASE A,
	V$INSTANCE B,
	V$RLOG C;

查询表空间信息

SELECT
	NAME AS 名称,
	DECODE(TYPE$,
	'1',
	'DB类型',
	'2',
	'临时表空间')AS 类型,
	DECODE(STATUS$,
	'0',
	'联机',
	'1',
	'脱机',
	'2',
	'RES_OFFLINE',
	'3',
	'CORRUPT')AS 状态,
	TOTAL_SIZE * PAGE / 1024 / 1024 AS 总大小MB,
	FILE_NUM AS 包含文件数
FROM
	V$TABLESPACE;

查询数据文件信息

SELECT
	PATH AS 文件路径,
	(TOTAL_SIZE * PAGE / 1024 / 1024)AS 文件大小MB,
	(FREE_SIZE * PAGE / 1024 / 1024)AS 剩余大小MB,
	(CAST((TOTAL_SIZE-FREE_SIZE)* 100 / TOTAL_SIZE AS NUMERIC(2,
	0))|| '%') AS 使用比例,
	DECODE(AUTO_EXTEND,
	'0',
	'关闭',
	'1',
	'打开') AS 自动扩展,
	NEXT_SIZE AS 扩充尺寸MB,
	MAX_SIZE AS 扩充上限MB,
	CREATE_TIME AS 创建时间,
	MODIFY_TIME AS 修改时间
FROM
	V$DATAFILE;

查询阻塞信息

  • dm8
WITH TRX_TAB AS(
SELECT
	DISTINCT O1.NAME,
	L1.TRX_ID
FROM
	V$LOCK L1,
	SYSOBJECTS O1
WHERE
	L1.TABLE_ID = O1.ID
	AND O1.ID <> 0),
TRX_SESS AS (
SELECT
	L.TRX_ID WT_TRXID,
	L.TID BLK_TRXID,
	L.BLOCKED,
	(
	SELECT
		NAME TABLE_NAME
	FROM
		TRX_TAB A
	WHERE
		A.TRX_ID = L.TRX_ID) WT_TABLE,
	S1.SESS_ID WT_SESS,
	S2.SESS_ID BLK_SESS,
	S1.USER_NAME WT_USER_NAME,
	S2.USER_NAME BLK_USER_NAME,
	S1.SQL_TEXT,
	S1.CLNT_IP,
	DATEDIFF(SS, S1.LAST_SEND_TIME, SYSDATE) SS
FROM
	V$LOCK L,
	V$SESSIONS S1,
	V$SESSIONS S2
WHERE
	L.TRX_ID = S1.TRX_ID
	AND L.TID = S2.TRX_ID
)SELECT
	SYSDATE STATTIME,
	*
FROM
	TRX_SESS
WHERE
	BLOCKED = 1;
  • dm7
WITH LOCKS AS(
SELECT
	O.NAME,
	L.*,
	S.SESS_ID,
	S.SQL_TEXT,
	S.CLNT_IP,
	S.LAST_SEND_TIME
FROM
	V$LOCK L,
	SYSOBJECTS O,
	V$SESSIONS S
WHERE
	L.TABLE_ID = O.ID
	AND L.TRX_ID = S.TRX_ID),
LOCK_TR AS(
SELECT
	TRX_ID WT_TRXID,
	ROW_IDX BLK_TRXID
FROM
	LOCKS
WHERE
	BLOCKED = 1),
RES AS(
SELECT
	SYSDATE STATTIME,
	T1.NAME,
	T1.SESS_ID WT_SESSID,
	S.WT_TRXID,
	T2.SESS_ID BLK_SESSID,
	S.BLK_TRXID,
	T2.CLNT_IP,
	SF_GET_SESSION_SQL(T1.SESS_ID)FULSQL,
	DATEDIFF(SS, T1.LAST_SEND_TIME, SYSDATE)SS,
	T1.SQL_TEXT WT_SQL
FROM
	LOCK_TR S,
	LOCKS T1,
	LOCKS T2
WHERE
	T1.LTYPE = 'OBJECT'
	AND T1.TABLE_ID <> 0
	AND T2.LTYPE = 'OBJECT'
	AND T2.TABLE_ID <> 0
	AND S.WT_TRXID = T1.TRX_ID
	AND S.BLK_TRXID = T2.TRX_ID)
SELECT
	DISTINCT WT_SQL,
	CLNT_IP,
	SS,
	WT_TRXID,
	BLK_TRXID
FROM
	RES;

查询等待事件

SELECT
	THREAD_ID AS "线程ID",
	TRX_ID AS "事务ID",
	WAIT_CLASS AS "等待类型号",
	WAIT_OBJECT AS "等待对象",
	WAIT_START AS "等待开始时间",
	TRUNC(WAIT_TIME, 6)/ 1000000 AS "等待时间"
FROM
	V$WAIT_HISTORY;

查询历史错误信息

SELECT
	SESS_ID AS "会话ID",
	TRX_ID AS "事务ID",
	DECODE(SU_FLAG,
	'U',
	'用户异常',
	'S',
	'系统异常',
	'P',
	'语法异常') AS "错误类型",
	SQL_TEXT AS "错误的SQL",
	ECPT_CODE AS "错误提示",
	ERR_TIME AS "产生时间"
FROM
	V$RUNTIME_ERR_HISTORY;

清除当日之前的空闲会话

DECLARE
  vsessid varchar(50);

venddate varchar(8);

isessioncnt int;

CURSOR c1;
BEGIN
	vsessid := '';

SELECT
	to_char(sysdate , 'yyyymmdd')
INTO
	venddate
FROM
	dual;
--获取指定日期
  SELECT
	count(1)
INTO
	isessioncnt
FROM
	v$sessions
WHERE
	state = 'IDLE'
	AND to_char(last_recv_time, 'yyyymmdd') < venddate;
--查看会话数
  OPEN c1 FOR
SELECT
	sess_id
FROM
	v$sessions
WHERE
	state = 'IDLE'
	AND to_char(create_time, 'yyyymmdd') < venddate;
--打开游标
loop
--循环获取会话ID
      IF c1%NOTFOUND THEN EXIT;
END IF;

FETCH c1
INTO
	vsessid;

sp_close_session(vsessid);
--删除会话
END loop;
--关闭游标
  CLOSE c1;
END;

清除大于1800的空闲会话

DECLARE
  vsessid varchar(50);

venddate varchar(8);

isessioncnt int;

CURSOR c1;
BEGIN
	vsessid := '';

SELECT
	to_char(sysdate + 1 , 'yyyymmdd')
INTO
	venddate
FROM
	dual;
--获取指定日期
  SELECT
	count(1)
INTO
	isessioncnt
FROM
	v$sessions
WHERE
	state = 'IDLE'
	AND to_char(last_recv_time, 'yyyymmdd') < venddate;
--查看会话数
  IF isessioncnt > 1800 THEN 	  
    OPEN c1 FOR
SELECT
	sess_id
FROM
	v$sessions
WHERE
	state = 'IDLE'
	AND to_char(create_time, 'yyyymmdd') < venddate;
--打开游标
loop
--循环获取会话ID
        IF c1%NOTFOUND THEN EXIT;
END IF;

FETCH c1
INTO
	vsessid;

sp_close_session(vsessid);
--删除会话
END loop;

CLOSE c1;
--关闭游标
END IF;
END;

缩小TEMP表空间

--缩小TEMP表空间大小为32M
SP_TRUNC_TS_FILE(3,0,32);

清理执行计划缓存

SP_CLEAR_PLAN_CACHE();

查询备份文件类型

SELECT
	DECODE(SF_BAK_GET_TYPE('/opt/bak/all.bak'),
	'0',
	'全量',
	'1',
	'增量',
	'2',
	'B树');

查询备份文件方式

SELECT
	DECODE(SF_BAK_GET_LEVEL('/opt/bak/all.bak'),
	'0',
	'联机备份',
	'1',
	'脱机备份');

查询备份文件时间

SELECT
	SF_BAK_GET_TIME('/opt/bak/all.bak');

查询备份文件簇大小

SELECT
	SF_BAK_GET_EXTENT_SIZE('/opt/bak/all.bak')|| '页';

查询备份文件页大小

SELECT
	SF_BAK_GET_PAGE_SIZE('/opt/bak/all.bak')/ 1024 || 'K';

查询备份文件大小写

SELECT
	DECODE(SF_BAK_GET_CASE_SENSITIVE('/opt/bak/all.bak'),
	'0',
	'不敏感',
	'1',
	'敏感');

查询备份文件数据库版本

SELECT
	SF_BAK_GET_GLOBAL_VERSION('/opt/bak/all.bak');

查询备份文件是否有归档

SELECT
	DECODE(SF_BAK_GET_ARCH_FLAG('/opt/bak/all.bak',
	'0',
	'未归档',
	'1',
	'归档');

查询备份文件是否加密

SELECT
	DECODE(SF_BAK_GET_ENCRYPT_TYPE ('/opt/bak/all.bak'),
	'0',
	'未加密',
	'1',
	'加密');

查询备份文件是压缩

SELECT
	DECODE(SF_BAK_GET_COMPRESSED('/opt/bak/all.bak'),
	'0',
	'未压缩',
	'1',
	'压缩');

监控数据库内存

--创建基础表
CREATE TABLE MEM_POOL("CONTTIME" TIMESTAMP(0),
"SUM(ORG)" VARCHAR2(20),
"SUM(TOTAL)" VARCHAR2(20));

--插入当前内存信息
INSERT
	INTO
	MEM_POOL
VALUES (SYSDATE(),
(
SELECT
	sum(ORG_SIZE)/ 1024 / 1024
FROM
	v$mem_pool),
(
SELECT
	sum(TOTAL_SIZE)/ 1024 / 1024
FROM
	v$mem_pool));

COMMIT;

监控指定索引是否使用

CREATE TABLE T1("C1" CHAR(10)); --创建测试表
CREATE INDEX IDX_T1_C1 ON T1("C1" ASC); --创建IDX_T1_C1索引
ALTER INDEX SYSDBA."IDX_T1_C1" MONITORING USAGE; --监控IDX_T1_C1索引
SELECT * FROM T1 WHERE T1.C1 = '1'; --使用IDX_T1_C1索引
ALTER INDEX SYSDBA."IDX_T1_C1" NOMONITORING USAGE; --取消监控INDEX_T1_C1索引
SELECT SCH_NAME AS "所属模式",TABLE_NAME AS "所属表",INDEX_NAME AS "索引名称", MONITORING AS "是否监控",USED AS "是否使用",START_MONITORING AS "开始监控时间",END_MONITORING AS "停止监控时间" FROM V$OBJECT_USAGE; --查看监控结果

监控指定模式下索引是否使用

  • 监控SYSDBA模式下的索引
SELECT
	'ALTER INDEX ' || OWNER || '."' || OBJECT_NAME || '" ' || 'MONITORING USAGE;'
FROM
	DBA_OBJECTS
WHERE
	OBJECT_TYPE = 'INDEX'
	AND GENERATED = 'N'
	AND OWNER = 'SYSDBA';
  • 取消监控SYSDBA模式下的索引
SELECT
	'ALTER INDEX ' || OWNER || '."' || OBJECT_NAME || '" ' || 'NOMONITORING USAGE;'
FROM
	DBA_OBJECTS
WHERE
	OBJECT_TYPE = 'INDEX'
	AND GENERATED = 'N'
	AND OWNER = 'SYSDBA'; 
  • 查看监控结果
SELECT
	SCH_NAME AS "所属模式",
	TABLE_NAME AS "所属表",
	INDEX_NAME AS "索引名称",
	MONITORING AS "是否监控",
	USED AS "是否使用",
	START_MONITORING AS "开始监控时间",
	END_MONITORING AS "停止监控时间"
FROM
	V$OBJECT_USAGE;

参考文章:https://blog.csdn.net/yuDazzle/article/details/118671006

相关推荐

C#委托—马工教你轻松玩转委托(c#中委托)

前言大家好,我是马工!在C#中有一个小白谈之色变的知识点叫委托,很多学了一两年C#的还不知道委托究竟是什么东西,本文就来帮你彻底解开解惑,从此委托就是小儿科!...

AR农业种植指导(农业种植模式)

以下是一些常见的AR/VR在农业中的应用场景及相关源码示例的一些思路(注意,完整且复杂的源码通常需要根据具体需求和大量开发工作来完成,这里只是简单示例):1.AR农业种植指导-功能描述:通过AR...

C#中timer中的enable和start以及stop的作用分别是什么?

文章来自AI问答的摘录。在C#中,System.Timers.Timer和System.Windows.Forms.Timer都提供了Enabled属性以及Start()和Stop()方法来控制定时器...

AOP实现原理浅析(简述aop的原理以及作用)

在C#中实现一个简单的动态代理框架,可以通过反射和System.Reflection.Emit命名空间动态生成代理类。以下是一个分步指南和示例代码:...

如何防止数据库服务器的 SQL 注入攻击

如何防止数据库服务器的SQL注入攻击防止SQL注入攻击需要从代码开发、数据库配置到安全运维的全流程防护。以下是详细且可操作的防护策略和步骤:...

.NET依赖注入实战:基于Autofac的完全指南与代码示例

...

AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类

...

C# winform中chart控件解决显示大量曲线数据卡顿

前言:...

Java静态三剑客(静态内部类/静态方法/静态类)的正确打开方式

作为Java程序员必知的"静态三剑客",它们看似简单却暗藏玄机!本文将带你解锁高阶玩法,避免99%开发者都会踩的坑!一、概念速览(颠覆传统认知)...

生成AutoCAD图纸批量合并代码(autocad怎么合并图纸)

想要生成AutoCAD图纸批量合并的代码。首先,我需要确定他使用哪个版本的AutoCAD,因为不同版本的API可能不同,比如VBA、.NET(C#或VB.NET)或者AutoLISP。不过用户没有具体...

C#从入门到精通(4)—Linq实现集合快速转换、筛选、排序、分组

前言大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在C#开发中需要经常对集合中的数据进行处理,比如我需要将一个Int类型的集合数...

CSnakes:在.NET项目中嵌入Python代码的工具

...

CSharp(dotNet)绝版面试题,面试大全(二)

21.简述C#的密封类和密封方法?C#中,密封类和密封方法都是使用sealed修饰。密封类表示这个类不能被继承。密封方法表示这个方法不能被重写,和virtual方法相对。22.请介绍C#静态构造器的特...

C#从入门到精通(7)—C#裁剪图像的几种方法总结

前言大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在上位机软件开发过程中经常需要裁剪图像,本文就是对c#中常见的裁剪图像方法进行...

Csharp 进度条的使用(c#进度条是哪个控件)

【开发过程】(1)创建一个Windows应用程序,项目名称为Ex047,窗体默认为Form"(2)在窗体中添加菜单、工具栏和状态栏。(3)面添加ProgressBar.设置。(4)在窗体载入Loa...

取消回复欢迎 发表评论: