日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何在.NET中讀取數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型 (.net讀取數(shù)據(jù)庫(kù)數(shù)據(jù)類(lèi)型)

在.NET開(kāi)發(fā)中,處理數(shù)據(jù)庫(kù)是很常見(jiàn)的任務(wù)。在處理數(shù)據(jù)庫(kù)時(shí),我們經(jīng)常需要讀取數(shù)據(jù)類(lèi)型以便進(jìn)行進(jìn)一步的操作。本文將介紹。

1.連接數(shù)據(jù)庫(kù)

我們需要連接到數(shù)據(jù)庫(kù)。在.NET中可以使用System.Data.SqlClient命名空間提供的SqlConnection類(lèi)來(lái)連接到SQL Server數(shù)據(jù)庫(kù)。

以下是一個(gè)示例連接字符串:

“`

string connString = “Server=MyServer;Database=MyDatabase;User Id=MyUserName;Password=MyPassword;”

SqlConnection conn = new SqlConnection(connString);

conn.Open();

“`

在這里,我們指定了服務(wù)器的名稱(chēng)以及要連接到的數(shù)據(jù)庫(kù)。還可以指定登錄憑據(jù),如果數(shù)據(jù)庫(kù)需要登錄憑據(jù)才能訪問(wèn)的話。

2.獲取表信息

一旦連接到數(shù)據(jù)庫(kù),就可以獲取表的信息。

“`

string query = “SELECT * FROM MyTable”;

SqlCommand cmd = new SqlCommand(query, conn);

SqlDataReader reader = cmd.ExecuteReader();

DataTable schemaTable = reader.GetSchemaTable();

“`

在這里,我們執(zhí)行了一個(gè)查詢(xún),獲取了表中所有數(shù)據(jù)的reader,然后通過(guò)調(diào)用GetSchemaTable方法獲取了表的元數(shù)據(jù)信息。

3.獲取列信息

一旦我們有了表的元數(shù)據(jù)信息,就可以輕松地獲取列的信息。

“`

DataColumnCollection columns = schemaTable.Columns;

foreach (DataRow row in schemaTable.Rows)

{

foreach (DataColumn column in columns)

{

Console.WriteLine(column.ColumnName);

Console.WriteLine(column.DataType);

}

}

“`

在這里,我們遍歷了每一行元數(shù)據(jù)信息(每一行對(duì)應(yīng)于表中的一個(gè)列),然后遍歷了每一列的元數(shù)據(jù)信息。

通過(guò)使用DataType屬性,我們可以獲取每個(gè)列的數(shù)據(jù)類(lèi)型。這對(duì)于以后在代碼中使用數(shù)據(jù)類(lèi)型非常有用。

4.關(guān)閉連接

我們不要忘記關(guān)閉連接。

“`

reader.Close();

conn.Close();

“`

這將斷開(kāi)與數(shù)據(jù)庫(kù)的連接,釋放資源。

在本文中,我們學(xué)習(xí)了。通過(guò)連接到數(shù)據(jù)庫(kù),獲取表信息,獲取列信息,我們可以輕松地讀取數(shù)據(jù)類(lèi)型并進(jìn)行進(jìn)一步的操作。為了使代碼更易于理解和維護(hù),請(qǐng)注意使用有意義的變量和注釋。

相關(guān)問(wèn)題拓展閱讀:

  • .net如何從數(shù)據(jù)庫(kù)取出二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為rtf文件

.net如何從數(shù)據(jù)庫(kù)取出二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為rtf文件

Oracle的Blob字段比較特殊,他比long字段的性能要好很多,可以用來(lái)保存例如圖片之類(lèi)的二進(jìn)制數(shù)據(jù)。

寫(xiě)入Blob字段和寫(xiě)入其它類(lèi)型字段的方式非常不同,因?yàn)锽lob自身有一個(gè)cursor,你必須使用cursor對(duì)blob進(jìn)行操作,因而你在寫(xiě)入Blob之前,必須獲得cursor才能進(jìn)行寫(xiě)入,那么如何獲得Blob的cursor呢?

這需要你先插入一個(gè)empty的blob,這將創(chuàng)建一個(gè)blob的cursor,然后你再把這個(gè)empty的blob的cursor用select查詢(xún)出來(lái),這樣通過(guò)兩步操作,你就獲得了blob的cursor,可以真正的寫(xiě)入blob數(shù)據(jù)了。

舉例如下:

Oracle系列:LOB大對(duì)滑租象處理

主要是用來(lái)存儲(chǔ)大量數(shù)據(jù)的數(shù)據(jù)庫(kù)字段,更大可以存儲(chǔ)4G字節(jié)的非結(jié)構(gòu)化數(shù)據(jù)。

主要介紹字符類(lèi)型和二進(jìn)制文件類(lèi)型LOB數(shù)據(jù)的存儲(chǔ),單獨(dú)介紹二進(jìn)制類(lèi)型LOB數(shù)據(jù)的存儲(chǔ)。

一,Oracle中的LOB數(shù)據(jù)類(lèi)型分類(lèi)

1,按存儲(chǔ)數(shù)據(jù)的類(lèi)型分:

①字符類(lèi)型:

CLOB:存儲(chǔ)大量 單字節(jié) 字符數(shù)據(jù)。

NLOB:存儲(chǔ)定寬 多字節(jié) 字符數(shù)據(jù)。

②二進(jìn)制類(lèi)型:

BLOB:存儲(chǔ)較大無(wú)結(jié)構(gòu)的二進(jìn)制數(shù)據(jù)。

③二進(jìn)制文件類(lèi)型:

BFILE:將二進(jìn)制文件存儲(chǔ)在數(shù)據(jù)庫(kù)外部的操作系統(tǒng)文件中。存放文件路徑。

2,按存儲(chǔ)方式分:

①存儲(chǔ)在內(nèi)部表空間:

CLOB,NLOB和BLOB

②指向外部操作系統(tǒng)文件:

BFILE

二,大對(duì)象數(shù)據(jù)的錄入

1,聲明LOB類(lèi)型列

/*

conn scott/tiger;

Create TableSpace ts5_21

DataFile ‘E:\Oracle\ts5_21.dbf’

Size 5m;

*/

Create Table tLob (

no Number(4),

name VarChar2(10),

resume CLob,

photo BLob,

record BFile

)

Lob (resume,photo)Store As (

Tablespace ts5_21 –指定存儲(chǔ)的表空間

Chunk 6k –指定數(shù)據(jù)塊大小

Disable Storage In Row

);

2,插入大對(duì)象列

①先插入普通列數(shù)據(jù)

②遇到大對(duì)象列時(shí),插入空白構(gòu)造函數(shù)。

字符型:empty_clob(),empty_nclob()

二進(jìn)制型:empty_blob()

二進(jìn)制文件類(lèi)型:BFileName函數(shù)指向外部文件。

BFileName函數(shù):

BFileName(‘邏輯目錄名’,‘文件名’);

邏輯目錄名只能大寫(xiě),因?yàn)閿?shù)據(jù)詞典是以大寫(xiě)方式存儲(chǔ)。Oracle是區(qū)分大小寫(xiě)的。

在創(chuàng)建時(shí),無(wú)需將BFileName函數(shù)邏輯目錄指向物理路徑,使用時(shí)才做檢查二者是否關(guān)聯(lián)。

例子:

Insert Into tLob Values(1,’Gene’,empty_clob(),empty_blob(),bfilename(‘MYDIR’,’IMG_0210.JPG’));

③將邏輯目錄和物理目錄關(guān)聯(lián)。(如果是二進(jìn)制文件類(lèi)型)

授予枯笑 CREATE ANY DIRECTORY 權(quán)限

Grant CREATE ANY DIRECTORY TO 用戶(hù)名 WITH ADMIN OPTION;

關(guān)聯(lián)邏輯目錄和物理目錄

本地

Create Directory 邏輯目錄名 As ‘文件的物理目錄’;

網(wǎng)絡(luò):

Create Directory 邏輯目錄名 As ‘\\主機(jī)名(IP)\共享目錄’;

例子:

Create Directory MYDIR As ‘E:\Oracle’;

插入例子:

insert into tlob values(1,’Gene’,’CLOB大對(duì)象列’,empty_blob(),bfilename(‘MYDIR’,’IMG_0210.JPG’信敗兆));

三,大對(duì)象數(shù)據(jù)的讀取和操作:DBMS_LOB包

DBMS_LOB包:包含處理大對(duì)象的過(guò)程和函數(shù)

/*

insert into tlob values(1,’Gene’,’CLOB大對(duì)象列’,empty_blob(),bfilename(‘MYDIR’,’IMG_0210.JPG’));

insert into tlob values(2,’Jack’,’CLOB大對(duì)象列’,empty_blob(),bfilename(‘MYDIR’,’IMG_0210.JPG’));

insert into tlob values(3,’Mary’,’大對(duì)象列CLOB’,empty_blob(),bfilename(‘MYDIR’,’IMG_0210.JPG’));

*/

1,讀取大對(duì)象數(shù)據(jù)的過(guò)程和函數(shù)

①:DBMS_LOB.Read():從LOB數(shù)據(jù)中讀取指定長(zhǎng)度數(shù)據(jù)到緩沖區(qū)的過(guò)程。

DBMS_LOB.Read(LOB數(shù)據(jù),指定長(zhǎng)度,起始位置,存儲(chǔ)返回LOB類(lèi)型值變量);

例子:

Declare

varC clob;

vRStr varchar2(1000);

ln number(4);

Strt number(4);

Begin

select resume into varC from tlob where no = 1;

ln := DBMS_LOB.GetLength(varC);

Strt := 1;

DBMS_LOB.Read(varC, ln, Strt, vRStr);

DBMS_output.put_line(‘Return: ‘||vRStr);

End;

②:DBMS_LOB.SubStr():從LOB數(shù)據(jù)中提取子字符串的函數(shù)。

DBMS_LOB.SubStr(LOB數(shù)據(jù),指定提取長(zhǎng)度,提取起始位置):

例子:

Declare

varC clob;

vRStr varchar2(1000);

ln number(4);

Strt number(4);

Begin

select resume into varC from tlob where no = 1;

ln := 4;

Strt := 1;

vRStr := DBMS_LOB.SubStr(varC, ln, Strt);

DBMS_output.put_line(‘結(jié)果為: ‘||vRStr);

End;

③:DBMS_LOB.InStr():從LOB數(shù)據(jù)中查找子字符串位置的函數(shù)。

DBMS_LOB.InStr(LOB數(shù)據(jù), 子字符串);

例子:

Declare

varC clob;

vSubStr varchar2(1000);

vRStr varchar2(1000);

ln number(4);

Begin

select resume into varC from tlob where no = 1;

vSubStr := ‘大對(duì)象’;

ln := DBMS_LOB.InStr(varC,vSubStr);

DBMS_output.put_line(‘位置為: ‘||ln);

vRStr := DBMS_LOB.SubStr(varC, Length(vSubStr), ln);

DBMS_output.put_line(‘位置為’||ln||’長(zhǎng)度為’||Length(vSubStr)||’的子字符串為:’||vRStr);

End;

④:DBMS_LOB.GetLength():返回指定LOB數(shù)據(jù)的長(zhǎng)度的函數(shù)。

DBMS_LOB.GetLength(LOB數(shù)據(jù));

⑤:DBMS_LOB.Compare():比較二個(gè)大對(duì)象是否相等。返回?cái)?shù)值0為相等,-1為不相等。

DBMS_LOB.Compare(LOB數(shù)據(jù),LOB數(shù)據(jù));

例子:

Declare

varC1 clob;

varC2 clob;

varC3 clob;

ln number(4);

Begin

select resume into varC1 from tlob where no = 1;

select resume into varC2 from tlob where no = 2;

select resume into varC3 from tlob where no = 3;

ln := DBMS_LOB.Compare(varC1,varC1);

DBMS_output.put_line(‘比較的結(jié)果為: ‘||ln);

ln := DBMS_LOB.Compare(varC2,varC3);

DBMS_output.put_line(‘比較的結(jié)果為: ‘||ln);

End;

2,操作大對(duì)象數(shù)據(jù)的過(guò)程

操作會(huì)改變數(shù)據(jù)庫(kù)中原有數(shù)據(jù),需要加上Updata鎖鎖上指定數(shù)據(jù)列,修改完后提交事務(wù)。

①:DBMS_LOB.Write():將指定數(shù)量的數(shù)據(jù)寫(xiě)入LOB的過(guò)程。

DBMS_LOB.Write(被寫(xiě)入LOB, 寫(xiě)入長(zhǎng)度(指寫(xiě)入LOB數(shù)據(jù)),寫(xiě)入起始位置(指被寫(xiě)入LOB),寫(xiě)入LOB數(shù)據(jù));

例子:

Declare

varC clob;

vWStr varchar2(1000);

vStrt number(4);

ln number(4);

Begin

vWStr := ‘CLOB’;

ln := Length(vWStr);

vStrt := 5;

select resume into varC from tlob where no = 1 FOR UPDATE;

DBMS_LOB.Write(varC, ln, vStrt, vWStr);

DBMS_output.put_line(‘改寫(xiě)結(jié)果為: ‘||varC);

Commit;

End;

②:DBMS_LOB.Append():將指定的LOB數(shù)據(jù)追加到指定的LOB數(shù)據(jù)后的過(guò)程。

DBMS_LOB.Append(LOB數(shù)據(jù),LOB數(shù)據(jù));

例子:

Declare

varC clob;

vAStr varchar2(1000);

Begin

vAStr := ‘,這是大對(duì)象列’;

select resume into varC from tlob where no = 1 FOR UPDATE;

DBMS_LOB.Append(varC, vAStr);

commit;

DBMS_output.put_line(‘追加結(jié)果為: ‘||varC);

End;

③:DBMS_LOB.Erase():刪除LOB數(shù)據(jù)中指定位置的部分?jǐn)?shù)據(jù)的過(guò)程;

DBMS_LOB.Erase(LOB數(shù)據(jù),指定刪除長(zhǎng)度, 開(kāi)始刪除位置);

例子:

Declare

varC clob;

ln number(4);

strt number(4);

Begin

ln := 1;

strt := 5;

select resume into varC from tlob where no = 1 FOR UPDATE;

DBMS_LOB.Erase(varC, ln, strt);

commit;

DBMS_output.put_line(‘擦除結(jié)果為: ‘||varC);

End;

④:DBMS_LOB.Trim():截?cái)郘OB數(shù)據(jù)中從之一位置開(kāi)始指定長(zhǎng)度的部分?jǐn)?shù)據(jù)的過(guò)程;

DBMS_LOB.Trim(LOB數(shù)據(jù),截?cái)嚅L(zhǎng)度);

例子:

Declare

varC clob;

ln number(4);

Begin

ln := 4;

select resume into varC from tlob where no = 1 FOR UPDATE;

DBMS_LOB.Trim(varC, ln);

COMMIT;

DBMS_output.put_line(‘截?cái)嘟Y(jié)果為: ‘||varC);

End;

⑤:DBMS_LOB.Copy():從指定位置開(kāi)始將源LOB復(fù)制到目標(biāo)LOB;

DBMS_LOB.Copy(源LOB,目標(biāo)LOB,復(fù)制源LOB長(zhǎng)度,復(fù)制到目標(biāo)LOB開(kāi)始位置,復(fù)制源LOB開(kāi)始位置)

例子:

Declare

vDEST_LOB clob;

vSRC_LOB clob;

AMOUNT number;

DEST_OFFSET number;

SRC_OFFSET number;

Begin

select resume into vDEST_LOB from tlob where no = 1 FOR UPDATE;

select resume into vSRC_LOB from tlob where no = 2 ;

AMOUNT := DBMS_LOB.GetLength(vSRC_LOB);

DEST_OFFSET := DBMS_LOB.GetLength(vDEST_LOB)+1;

SRC_OFFSET := 1;

DBMS_LOB.Copy(vDEST_LOB, vSRC_LOB, AMOUNT, DEST_OFFSET, SRC_OFFSET);

DBMS_output.put_line(‘拷貝結(jié)果為: ‘||vDEST_LOB);

End;

關(guān)于使用LOB數(shù)據(jù)類(lèi)型的性能問(wèn)題:

Clob/blob實(shí)現(xiàn)是比較復(fù)雜的,這里只提提幾個(gè)和性能相關(guān)的點(diǎn),當(dāng)然能不用lob盡量不用:

a、 一個(gè)lob字段包括lobindex和lobsegment

b、 Lob缺省可以存放在表中(表字段),條件是:

1.它的大小小于4kb

2.并且在定義的時(shí)候沒(méi)有使用(disable storage inrow)字句(缺省是enable)

當(dāng)lob大于4kb的時(shí)候它會(huì)被存放到lobsegment中

c、 當(dāng)lob存放在表中的時(shí)候,它可以被緩存,對(duì)于它的操作效率遠(yuǎn)遠(yuǎn)高于存儲(chǔ)在lobsegment中的lob(不用lobindex)

d、 存儲(chǔ)在lobsegment中的lob缺省不在緩沖區(qū)緩存,對(duì)于lob的讀寫(xiě)都是物理IO,代價(jià)非常高,所以對(duì)于大于4kb的lob字段千萬(wàn)不要頻繁更新,效率非常低

e、 存儲(chǔ)在lobsegment中的lob可以在定義的時(shí)候指定使用cache(默認(rèn)是nocache),這對(duì)于中等大小的lob(比如幾k~幾十k)很有效果,減少物理IO

使用其他數(shù)據(jù)類(lèi)型需要考慮的性能問(wèn)題:

1、 Char

定長(zhǎng)格式字符串,在數(shù)據(jù)庫(kù)中存儲(chǔ)時(shí)不足位數(shù)填補(bǔ)空格,不建議使用,會(huì)帶來(lái)不必要的麻煩

a、 字符串比較的時(shí)候,如果不注意(char不足位補(bǔ)空格)會(huì)帶來(lái)錯(cuò)誤

b、 字符串比較的時(shí)候,如果用trim函數(shù),這樣該字段上的索引就失效(有時(shí)候會(huì)帶來(lái)嚴(yán)重性能問(wèn)題)

c、 浪費(fèi)存儲(chǔ)空間

2、 Varchar2/Varchar

不定長(zhǎng)格式字符串,對(duì)于4000字節(jié)以?xún)?nèi)的字符串,建議都用該類(lèi)型

a、 網(wǎng)上有說(shuō)char比varchar2性能好,但是如果你有興趣做測(cè)試的話,會(huì)發(fā)現(xiàn)沒(méi)有區(qū)別(如果發(fā)生行遷移,可以通過(guò)pctfree來(lái)調(diào)整)

b、 充分利用存儲(chǔ)空間

3、 Long/long raw

Oracle已經(jīng)廢棄,只是為了向下兼容保留著,應(yīng)該全部升級(jí)到lob

Long類(lèi)型有很多限制

a、 表中只能有一列l(wèi)ong類(lèi)型

b、 Long類(lèi)型不支持分布式事務(wù)

c、 太多的查詢(xún)不能在long上使用了

4、 Number

定義Number的方法:Number(p,s)

其中p,s都是可選的:

a、 p代表精度,默認(rèn)為38

b、 s代表小數(shù)位數(shù),取值范圍-84~127,默認(rèn)取值要看是否指定了p,如果制定了p,默認(rèn)s為0,如果沒(méi)有指定p,默認(rèn)取更大值。

幾個(gè)例子:

a、 Number(5,0)=Number(5) 取值范圍99999~-99999

b、 Number(5,2) 取值范圍999.99~-999.99

注意:其中的整數(shù)位數(shù)只有3位,小數(shù)位數(shù)有2位,按照如下方法計(jì)算:

整數(shù)位數(shù)b>c

a、Where date_colum>=to_date(’01-jan-2023’,’dd-mon-yyyy’)

and date_colum

b、Where trunc(date_colum,’y’)=to_date(’01-jan-2023’,’dd-mon-yyyy’)

c、Where to_char(date_colum,’yyyy’)=’2023’

.net讀取數(shù)據(jù)庫(kù)數(shù)據(jù)類(lèi)型的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于.net讀取數(shù)據(jù)庫(kù)數(shù)據(jù)類(lèi)型,如何在.NET中讀取數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型,.net如何從數(shù)據(jù)庫(kù)取出二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為rtf文件的信息別忘了在本站進(jìn)行查找喔。

成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專(zhuān)業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專(zhuān)注成都高端網(wǎng)站建設(shè)定制開(kāi)發(fā)服務(wù),為客戶(hù)提供專(zhuān)業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開(kāi)發(fā),營(yíng)銷(xiāo)網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。


網(wǎng)頁(yè)標(biāo)題:如何在.NET中讀取數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型 (.net讀取數(shù)據(jù)庫(kù)數(shù)據(jù)類(lèi)型)
轉(zhuǎn)載來(lái)于:http://www.dlmjj.cn/article/dhgcshp.html