[20240320]空格與sqlpus的sql語句.txt

来源:https://www.cnblogs.com/lfree/p/18093635
-Advertisement-
Play Games

windows 安裝sqlserver服務 SQL Server 下載 | Microsoft 或者MSDN, 我告訴你 - 做一個安靜的工具站 (itellyou.cn) 安裝 關閉windows防火牆並重新運行 一路下一步直到 這樣設置可以讓安裝該服務的用戶直接 安裝管理工具 docker 20 ...


[20240320]空格與sqlpus的sql語句.txt

--//優化sql語句時遇到的問題,自己上我發現我手工執行獲得的sql_id與程式裡面的sql_id不一致,原因很多sqlplus下如果是dos文本格
--//式,計算的文本會將\r\n字元變成\n,如果多行,文本結尾的空格會刪除等等,通過例子說明:

1.環境:
SCOTT@book> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.測試1:
--//開頭存在空格.
SCOTT@book>   select * from dept where deptno=10;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
 832478979 agw1v10stx7s3            0      40707      2852011669  319e9f03  2024-03-20 08:31:08    16777216

SCOTT@book> select * from dept where deptno=10;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
 911274289 4xamnunv51w9j            0      61745      2852011669  3650f131  2024-03-20 08:31:14    16777216


SCOTT@book> select sql_text from v$sql where sql_id in ('agw1v10stx7s3','4xamnunv51w9j');
SQL_TEXT
------------------------------------------------------------
  select * from dept where deptno=10
select * from dept where deptno=10

--//並沒有刪除開頭的sql語句。

3.測試2:
--//執行腳本的結尾存在空格.
SCOTT@book> select * from dept where deptno=10   ;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
2103677907 8qprua5yq74ym            0     103379      2852011669  7d6393d3  2024-03-22 15:58:00    16777216

SCOTT@book> select * from dept where deptno=10;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
 911274289 4xamnunv51w9j            0      61745      2852011669  3650f131  2024-03-22 15:58:05    16777216

SCOTT@book> select sql_text||'A' c60  from v$sql where sql_id in ('8qprua5yq74ym','4xamnunv51w9j');
C60
------------------------------------------------------------
select * from dept where deptno=10A
select * from dept where deptno=10   A

--//很明顯分號結尾的空格計算在內.

4.測試3:
--//建立文件b1.txt,unix文件格式。
$ cat -Ev b1.txt
select * from dept where    $
deptno=20;$
--//where後面有4個空格。

SCOTT@book> @ b1.txt
    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
 561182986 4rj7xbhhr5y8a            0      63754      2852011669  2172f90a  2024-03-20 09:04:38    16777221
--//記下sql_id=4rj7xbhhr5y8a

--//首先看看v$sql視圖sql_text與sql_fulltext的區別:
SCOTT@book> select sql_text  from v$sql where sql_id='4rj7xbhhr5y8a';
SQL_TEXT
------------------------------------------------------------
select * from dept where deptno=20

SCOTT@book> select sql_fulltext c60  from v$sql where sql_id='4rj7xbhhr5y8a';
C60
------------------------------------------------------------
select * from dept where
deptno=20

--//可以看出v$sql視圖sql_text與sql_fulltext的區別,sql_text刪除結尾的空格,並且過濾了\n字元,而sql_fulltext基本原樣輸出。
--//另外註意一點兩者sql_text,sql_fulltext數據類型不一樣,前者varchar2(1000),後者clob類型。

--//sql_id的計算問題:
SCOTT@book>  spool b31.txt
SCOTT@book> @ sql_idz 4rj7xbhhr5y8a

--SQL_ID = 4rj7xbhhr5y8a

select * from dept where
deptno=20;

SCOTT@book> spool off

$ cat -Ev b31.txt
SCOTT@book> @ sql_idz 4rj7xbhhr5y8a$
$
--SQL_ID = 4rj7xbhhr5y8a$
$
select * from dept where$
deptno=20;$
$
SCOTT@book> spool off$

--//註意看where後面的空格丟失了,也許輸出忘記考慮trimspool的設置問題。看看計算如何.

$ ~/bin/sql_idx.sh b1.txt 1 > bb.txt
sql_text = select * from dept where    $
deptno=20\0$
full_hash_value(16) = C141E01E5D8842BB39E5FAFE98FC8176 $
hash_value(10) = 2566685046 $
sql_id(32) = 3mtguzucgt0bq$
sql_id(32) = 3mtguzucgt0bq$
sql_id(32) = 3mtguzucgt0bq$

--//很明顯使用我寫的腳本計算sql_id=3mtguzucgt0bq與sqlplus程式執行的sql_id=4rj7xbhhr5y8a不同.
--//改寫如下:
$ cp b1.txt b2.txt
$ vi b2.txt
$ cat -Ev b2.txt
select * from dept where$
deptno=20;$

$ ~/bin/sql_idx.sh b2.txt 1 >| bb1.txt
$ cat -Ev bb1.txt
sql_text = select * from dept where$
deptno=20\0$
full_hash_value(16) = E375F34FDCD15D104BC4FD5C2172F90A $
hash_value(10) = 561182986 $
sql_id(32) = 4rj7xbhhr5y8a$
sql_id(32) = 4rj7xbhhr5y8a$
sql_id(32) = 4rj7xbhhr5y8a$

--//很明顯sql_id計算使用的是b2.txt的文件計算的,where後面的空格取消了。

5.測試4:
--//再來看看文件格式問題。
$ unix2dos b1.txt
unix2dos: converting file b1.txt to DOS format ...

SCOTT@book> @ b1.txt
    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
 561182986 4rj7xbhhr5y8a            0      63754      2852011669  2172f90a  2024-03-20 09:24:04    16777224

--//還是一樣,說明還是按照b2.txt的文件計算sql_id。

6.測試5:
--//建立文件bx.sql,unix文件格式。
$ cat -Ev bx.sql
select ^M  * ^M  from ^M dept ^Mwhere ^Mdeptno=20;$

SCOTT@book> @ bx.sql
    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
1668358914 cymmqupjr28s2            0      74498      2852011669  63712302  2024-03-20 15:16:34    16777221

SCOTT@book> select sql_text  from v$sql where sql_id='cymmqupjr28s2';
SQL_TEXT
------------------------------------------------------------
deptno=20

SCOTT@book> select sql_fulltext  from v$sql where sql_id='cymmqupjr28s2';
SQL_FULLTEXT
-----------------------------------------------------------
deptno=20
--//^M的輸出導致輸出看的非常怪異!!

SCOTT@book> @ sql_idx cymmqupjr28s2
--SQL_ID = cymmqupjr28s2
deptno=20;

SCOTT@book> @ sql_idz cymmqupjr28s2
--SQL_ID = cymmqupjr28s2
deptno=20;

SCOTT@book> @ sql_id cymmqupjr28s2
--SQL_ID = cymmqupjr28s2
select   *   from  dept where deptno=20;
--//註:我寫的3個查看sql_id的版本,sql_id.sql版本過濾掉^M.sql_idz.sql的保持原樣輸出.

SCOTT@book> spool by.txt
SCOTT@book> select sql_fulltext  from v$sql where sql_id='cymmqupjr28s2';
SQL_FULLTEXT
-------------------------------------------------------------------------
deptno=20

SCOTT@book> spool off

--//編輯by.txt後如下:
$ cat -Ev by.txt
select ^M  * ^M  from ^M dept ^Mwhere ^Mdeptno=20$

$ ~/bin/sql_idx.sh by.txt 1 | cat -Ev
sql_text = select ^M  * ^M  from ^M dept ^Mwhere ^Mdeptno=20\0$
full_hash_value(16) = 0E6C6BF775D7AA8DCF4E76D563712302 $
hash_value(10) = 1668358914 $
sql_id(32) = cymmqupjr28s2$
sql_id(32) = cymmqupjr28s2$
sql_id(32) = cymmqupjr28s2$

$ ~/bin/sql_idx.sh bx.sql 1 | cat -Ev
sql_text = select ^M  * ^M  from ^M dept ^Mwhere ^Mdeptno=20\0$
full_hash_value(16) = 0E6C6BF775D7AA8DCF4E76D563712302 $
hash_value(10) = 1668358914 $
sql_id(32) = cymmqupjr28s2$
sql_id(32) = cymmqupjr28s2$
sql_id(32) = cymmqupjr28s2$

--//可以看出中間出現的^M不過過濾.

7.繼續測試:
--//重新編輯bx.sql,內容如下:
$ cat -Ev bx.sql
select ^M$
  * $
^M  $
from ^M $
dept ^Mwhere ^Mdeptno=20;$

SCOTT@book> SET SQLBLANKLINES OFF
SCOTT@book> @ bx.sql
SP2-0042: unknown command "from" - rest of line ignored.
wher..." - rest of line ignored.ing "dept
--//存在一個空行。

SCOTT@book> SET SQLBLANKLINES ON
SCOTT@book> @ bx.sql
    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
 987480685 a9mmzpcxdrhmd            0     115309      2852011669  3adbc26d  2024-03-20 15:27:59    16777220

SCOTT@book> select sql_text  from v$sql where sql_id='a9mmzpcxdrhmd';
SQL_TEXT
------------------------------------------------------------
deptno=20*  from dept

SCOTT@book> select sql_fulltext c60 from v$sql where sql_id='a9mmzpcxdrhmd';
C60
------------------------------------------------------------
select
  *

from
deptno=20


SCOTT@book> @ sql_id a9mmzpcxdrhmd

--SQL_ID = a9mmzpcxdrhmd

select
  *

from
dept where deptno=20;

SCOTT@book> @ sql_idx a9mmzpcxdrhmd

--SQL_ID = a9mmzpcxdrhmd

select
  *

from
deptno=20;

SCOTT@book> @ sql_idz a9mmzpcxdrhmd

--SQL_ID = a9mmzpcxdrhmd

select
  *

from
deptno=20;


SCOTT@book> spool by.txt
SCOTT@book> select sql_fulltext c60 from v$sql where sql_id='a9mmzpcxdrhmd';
C60
------------------------------------------------------------
select
  *

from
deptno=20


SCOTT@book> spool off


$ cat -Ev by.txt
SCOTT@book> select sql_fulltext c60 from v$sql where sql_id='a9mmzpcxdrhmd';$
C60$
------------------------------------------------------------$
select$
  *$
$
from$
dept ^Mwhere ^Mdeptno=20$
$
$
SCOTT@book> spool off$

--//為了對比方便,複製上面的cat -Ev bx.sql輸出:
$ cat -Ev bx.sql
select ^M$
  * $
^M  $
from ^M $
dept ^Mwhere ^Mdeptno=20;$

--//對比bx.sql的內容:
--//第1行select後面的空格,^M消失。
--//第2行*後面的空格消失。
--//第3行全部刪除。
--//第4行from後面的空格以及^M刪除.
--//第5行保留中間出現的的^M。

--//編輯by.txt
$ cat -Ev by.txt
select$
  *$
$
from$
dept ^Mwhere ^Mdeptno=20$

$ ~/bin/sql_idx.sh by.txt 1 | cat -Ev
sql_text = select$
  *$
$
from$
dept ^Mwhere ^Mdeptno=20\0$
full_hash_value(16) = D830D3E1D201C57AA4CE7FAB3ADBC26D $
hash_value(10) = 987480685 $
sql_id(32) = a9mmzpcxdrhmd$
sql_id(32) = a9mmzpcxdrhmd$
sql_id(32) = a9mmzpcxdrhmd$
--//可以確定sql_id計算使用的是v$sql.sql_fulltext計算的。

SCOTT@book> spool bz.txt
SCOTT@book> @ sql_idz a9mmzpcxdrhmd

--SQL_ID = a9mmzpcxdrhmd

select
  *

from
deptno=20;

SCOTT@book>  spool off

 $ cat -Ev bz.txt
select$
  *$
$
from$
dept ^Mwhere ^Mdeptno=20;$


$ ~/bin/sql_idx.sh bz.txt 1 | cat -Ev
sql_text = select$
  *$
$
from$
dept ^Mwhere ^Mdeptno=20\0$
full_hash_value(16) = D830D3E1D201C57AA4CE7FAB3ADBC26D $
hash_value(10) = 987480685 $
sql_id(32) = a9mmzpcxdrhmd$
sql_id(32) = a9mmzpcxdrhmd$
sql_id(32) = a9mmzpcxdrhmd$

8.總結:
--//我以前一直認為都是按照sqlplus的方式計算的,實際上並不是這樣的情況,其它程式比如PB開發的程式或者w3wp.exe的程式,裡面
--//sql語句是保持"原樣",大部分應該如此.

--//這樣就好解析我生產系統遇到的問題。
--//我生成的腳本過濾掉chr(13)變成unix格式,在這種情況下計算的sql_id肯定不一樣,另外結尾的空格也保留下來,總之sqlplus下執
--//行獲得sql_id 與其它程式的sql_id不同是很正常的情況。

--//你可以測試最新的toad下結尾的空格是保留的,早期的toad版本是在執行前在最後一行加入1個空格,最新的版本沒有這個問題.
--//參考:
--//[20120327]toad與sqlplus下執行sql語句的一個細節.txt ->https://blog.itpub.net/267265/viewspace-719592/
--//[20150803]toad 12版本1個小變化.txt  -> https://blog.itpub.net/267265/viewspace-1760071/

9.附上相關腳本:
$ cat sql_idz.sql
SET LINESIZE 32767
--SET LINESIZE 4000
VAR V_SQL_FULLTEXT CLOB
COL SQL_FULLTEXT FOR A4000 WORD_WRAP

SET FEEDBACK OFF
SET SERVEROUTPUT ON

PROMPT
PROMPT --SQL_ID = &&1
PROMPT

DECLARE
    V_SQL_FULLTEXT   CLOB;
    V_COUNT          NUMBER;
BEGIN
    SELECT COUNT(*) INTO V_COUNT  FROM GV$SQLAREA WHERE SQL_ID = '&&1' AND ROWNUM=1;
    IF  V_COUNT=1
    THEN
        SELECT SQL_FULLTEXT||';' SQL_FULLTEXT INTO V_SQL_FULLTEXT FROM GV$SQLAREA WHERE SQL_ID = '&&1' AND ROWNUM = 1;
        --SELECT REPLACE (SQL_FULLTEXT||';', '', '') SQL_FULLTEXT INTO V_SQL_FULLTEXT FROM GV$SQLAREA WHERE SQL_ID = '&&1' AND ROWNUM = 1;
        --SELECT REPLACE (SQL_FULLTEXT||';', CHR(13), '') SQL_FULLTEXT INTO V_SQL_FULLTEXT FROM GV$SQLAREA WHERE SQL_ID = '&&1' AND ROWNUM = 1;
        --SELECT REPLACE (SQL_FULLTEXT||';', CHR(13), chr(13)) SQL_FULLTEXT INTO V_SQL_FULLTEXT FROM GV$SQLAREA WHERE SQL_ID = '&&1' AND ROWNUM = 1;
        DBMS_OUTPUT.PUT_LINE (V_SQL_FULLTEXT);
    ELSE
        SELECT COUNT(*)  INTO V_COUNT  FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1;
        IF  V_COUNT=1
        THEN
            SELECT SQL_TEXT||';' INTO V_SQL_FULLTEXT  FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1;
            --SELECT REPLACE (SQL_TEXT||';','','')  INTO V_SQL_FULLTEXT  FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1;
            --SELECT REPLACE (SQL_TEXT||';',CHR(13),'')  INTO V_SQL_FULLTEXT  FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1;
            --SELECT REPLACE (SQL_TEXT||';',CHR(13),chr(13))  INTO V_SQL_FULLTEXT  FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1;
            DBMS_OUTPUT.PUT_LINE (V_SQL_FULLTEXT);
        END IF;
    END IF;
    EXCEPTION WHEN NO_DATA_FOUND THEN
        NULL;
END;
/

PROMPT
SET SERVEROUTPUT OFF
SET FEEDBACK 6
SET LINESIZE 277

$ cat ~/bin/sql_idx.sh
#! /bin/bash
# calcucate sql_text of full_hash_value(16),hash_value(10),sql_id(32).
# argv1 sql statement or sql of text file
# argv2 flag: 0= sql statement 1=sql of text file

odebug=${ODEBUG:-0}
oflag=${2:-0}

if [ $oflag -eq 0 ]
then
    sql_text=${1}'\0'
fi

if [ $oflag -eq 1 ]
then
#   sql_text="$( cat $1 | dos2unix | sed '$s/;\s*//')"'\0'
$//" | sed '$s/;\s*//')"'\0'd "s/
   sql_text="$( cat $1 | sed '$s/;\s*//')"'\0'
fi

v1=$(echo -e -n "$sql_text" | md5sum | sed 's/  -//' | xxd -r -p | od -t x4 |  sed   -n  -e 's/^0\+ //' -e 's/ //gp' | tr 'a-z' 'A-Z')
v2=${v1:(-16):16}
v3=${v2:(-8):8}
# v2=$(echo "obase=16;ibase=16; $v1 % 10000000000000000" | bc| tr -d '\\\r\n')
# v3=$(echo "obase=10;ibase=16; $v1 % 100000000" | bc| tr -d '\\\r\n')

if [ $odebug -eq 1 ] ; then
        echo v1=$v1 v2=$v2 v3=$v3
fi

echo "sql_text = $sql_text"
echo "full_hash_value(16) = $v1 "
echo "hash_value(10) = $(( 16#$v3 )) "

BASE32=($(echo {0..9} {a..z} | tr -d 'eilo'))
res=''
for i in $(echo "obase=32;ibase=16; $v2" | bc| tr -d '\\\r\n')
do
        res=${res}${BASE32[$(( 10#$i ))]}
done
echo "sql_id(32) = $(printf "%13s" $res | tr ' ' '0')"
echo "sql_id(32) = $(printf "%013s" $res)"

res1=$(eval $(echo "obase=32;ibase=16; $v2" | bc| tr -d '\\\r\n' | awk 'BEGIN{RS=" +"; printf "echo " }/./{printf "${BASE32[$(( 10#%02d))]}", $1}' ))
echo "sql_id(32) = $(printf "%013s" $res1)"




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 實驗介紹: 當電腦聯入網路時,域控制器首先要鑒別這臺電腦是否是屬於這個域的,用戶使用的登錄賬號是否存在、密碼是否正確。如果以上信息有一樣不正確,那麼域控制器就會拒絕這個用戶從這臺電腦登錄,相當於一個單位的門衛一樣。 一:dns1上安裝AD域服務 打開一臺windows虛擬機,改名為dns1 添加ad ...
  • Arduino IDE 環境配置 目錄Arduino IDE 環境配置1. 安裝方式2. 操作方法(Arduino中文社區)2.1. 安裝Arduino IDE2.2. 下載固件2.3. 修改Arduino IDE語言2.4. 添加開發板管理網址2.5. 運行離線包2.6. 檢查安裝是否成功 1. ...
  • 前提 centos7系統 新建系統時選擇的預設分區 vgs等查看捲組命令無回顯 根目錄磁碟空間不足 大致流程及註意事項 處理方法:刪除再重建 不會導致其中的數據丟失 防止出現意外,請備份或者快照 1.率先在VMware中對虛擬機進行磁碟容量擴容 此處進行20g --> 40g的擴容 2.再在虛擬機中 ...
  • 問題描述 在使用VMWare17.5.0版本安裝ubuntu22.0.4.4的時候遇到問題。安裝完成ubuntu之後,我在虛擬機中點擊滑鼠左鍵沒有問題,單獨按下鍵盤也沒有問題,但是如果按下鍵盤的同時在按下滑鼠左鍵就會卡住。而且100%穩定復現。 具體的卡死按鍵: ctrl+滑鼠左鍵 alt+滑鼠左鍵 ...
  • Ubuntu Server 20.04詳細安裝教程 1. Ubuntu Server20.04啟動盤製作 1.1 下載鏡像 去Ubuntu官網找到20.04的鏡像文件(20.04下載地址),按照自己的需求下載 iso文件 1.2 製作啟動盤 用Rufus製作啟動盤,到官網下載文件(rufus官網) ...
  • 蘇州農商銀行基於GaussDB資料庫,對核心業務系統“超級網銀”進行了全面改造升級,極大提升了系統的穩定性和安全性。 ...
  • 在GreatSQL中,Binlog可以說是 GreatSQL 中比較重要的日誌了,在日常開發及運維過程中經常會遇到。Binlog即Binary Log,二進位日誌文件,也叫作變更日誌(Update Log)。 詳細Binglog日誌介紹 Binglog主要應用於數據恢復和數據複製,但是在Binlog ...
  • 本文分享自華為雲社區《GaussDB(DWS)業務高可靠原理》,作者: yd_291396996。 1. 前言 適用版本:【8.1.0及以上】 GaussDB(DWS)所有內部組件CN、DN、GTM、CM等採用多活或主備設計,通過集群管理進行故障檢測和切換,保證了單點故障場景下業務的可靠性。此外還採 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...