ORACLE數據庫中主要字段類型的讀寫例子(包括:L
系統
2275 0
這里我用的是ORACLE9I, 建立了表C_EMP1_T,結構如下:
create table C_EMP1_T
(
? EMP_ID???????? NUMBER(20) not null,????//用戶ID
? EMP_NO???????? VARCHAR2(20),????????//用戶編號
? EMP_DESC?????? LONG,????????????????????????//用戶簡歷????
? USED_DATE????? DATE,????????????????????????//注冊日期
? EMP_IC_MAC???? RAW(50),????????????????//用戶IC卡的MAC號
? EMP_ADMIN_FLAG CHAR(1),????????//管理員標志
? EMP_PICTURE??? BLOB????????????????????//用戶圖像
)
其中INSERT/UPDATE/SELECT的代碼分別如下(DELETE比較簡單就省略了,其中SELECT和UPDATE的條件都是記錄的rowid):
首先BLOB字段是存圖片的,所以有一個過程是把圖片傳到服務器上:
????先在aspx上加:
<form id="Form1" enctype="multipart/form-data" method="post" runat="server">
????<input id="IoFile" runat="server" type="file"> <FONT face="宋體">下一步→</FONT>
???????<asp:Button id="btunload" runat="server" Text="上傳"></asp:Button>
</form>
和代碼:
????
private
?
void
?btunload_Click(
object
?sender,?System.EventArgs?e)
????????
{
????????????
????????????btunload.Enabled?
=
?
false
;
????????????
//
獲得文件名稱?
????????????
????????
string
?tempfilename?
=
?IoFile.PostedFile.FileName;
????????
//
注:?loFile.PostedFile.FileName?返回的是?通過文件對話框選擇的文件名,這之中包含了文件的目錄信息
????????tempfilename?
=
?Path.GetFileName?(?tempfilename);
????????????
if
?(tempfilename.Substring(tempfilename.Length
-
4
,
4
)?
==
?
"
.bmp
"
)
????????????
{
????????
//
去掉目錄信息,返回文件名稱
????????
//
判斷上傳目錄是否存在,不存在就建立?
????????????????
string
?tempDirectory?
=
?
"
D:/WWWROOT/MYWEB/dbtest/Image/
"
;
????????
if
?(?
!
?Directory.Exists?(?tempDirectory?)?)??
????????????Directory.CreateDirectory?(?tempDirectory?)?;
????????
//
上傳文件到服務器?
????????????????
string
?tempPath?
=
?tempDirectory
+
tempfilename;
//
得到上傳目錄及文件名稱?
????????????????IoFile.PostedFile.SaveAs?(?tempPath?);
????????????????Label1.Text?
=
?
"
<img?src='image/
"
+
tempfilename
+
"
'>
"
;
????????????????Session[
"
filename
"
]?
=
?tempfilename;
????????????}
????????????
else
????????????
{
????????????????Label1.Text?
=
?
"
錯誤的文件類型
"
;
????????????}
????????????btunload.Enabled??
=
?
true
;
????????????
/**/
/*
'?獲得并顯示上傳文件的屬性?
FileName.Text?=?lstrFileName
'?獲得文件名稱
FileType.Text?=?loFile.PostedFile.ContentType?
'?獲得文件類型
FileLength.Text?=?cStr?(?loFile.PostedFile.ContentLength?)?
'?獲得文件長度
FileUploadForm.visible?=?false?
AnswerMsg.visible?=?true
'?顯示上傳文件屬性
End?sub?
*/
????????}
INSERT:
private
?
void
?BtInsert_Click(
object
?sender,?System.EventArgs?e)
????????
{
????????????
????????????
????????????OracleConnection?Ocon?
=
?
new
??OracleConnection(
"
user?id=cmes;data?source=mes;password=cmes
"
);
????????????Ocon.Open();?
????????????
//
OracleCommand?Ocom?=?new?OracleCommand("insert?into?c_emp1_t?(EMP_ID,EMP_NO,EMP_DESC,USED_DATE,EMP_IC_MAC,EMP_ADMIN_FLAG,EMP_PICTURE)values(:emp_id,:emp_no,:emp_desc,:emp_date,:emp_ic_mac,:flag,:picture)",Ocon);
????????????OracleCommand?Ocom?
=
?
new
?OracleCommand(
"
insert?into?c_emp1_t?(EMP_ID,EMP_NO,EMP_DESC,USED_DATE,EMP_IC_MAC,EMP_ADMIN_FLAG)values(:emp_id,:emp_no,:emp_desc,:emp_date,:emp_ic_mac,:flag)
"
,Ocon);
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_id
"
,OracleType.Number));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_no
"
,OracleType.VarChar));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_desc
"
,OracleType.LongVarChar));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_date
"
,OracleType.DateTime));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
flag
"
,OracleType.Char));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_ic_mac
"
,OracleType.Raw));
????????????
//
Ocom.Parameters.Add(new?OracleParameter("picture",OracleType.Blob));
????????????Ocom.Parameters[
"
emp_id
"
].Value?
=
?Convert.ToDecimal(tbempid.Text);
????????????Ocom.Parameters[
"
emp_no
"
].Value?
=
?tbempno.Text;
????????????Ocom.Parameters[
"
emp_desc
"
].Value?
=
?tbempdesc.Text;
????????????
string
?empdate?
=
?tbempdate.Text;
//
?yyyymmdd
????????????Ocom.Parameters[
"
emp_date
"
].Value?
=
????
new
?DateTime(Convert.ToInt32(empdate.Substring(
0
,
4
)),Convert.ToInt32(empdate.Substring(
4
,
2
)),Convert.ToInt32(empdate.Substring(
6
,
2
))?);
????????????
if
?(rb1.Checked)?
????????????????Ocom.Parameters[
"
flag
"
].Value?
=
?
'
1
'
;
????????????
if
?(rb2.Checked)?
????????????????Ocom.Parameters[
"
flag
"
].Value?
=
?
'
2
'
;
????????????
if
?(rb3.Checked)?
????????????????Ocom.Parameters[
"
flag
"
].Value?
=
?
'
3
'
;
????????????Ocom.Parameters[
"
emp_ic_mac
"
].Value?
=
?setraw(tbicmac.Text);????????????
????????????Ocom.ExecuteNonQuery();
????????????
/**/
/*
由與有字段long和blob一起,所以不能在一個insert語句中進行插入,單獨insert是成功的
????????????
????????????OracleConnection?Ocon?=?new??OracleConnection("user?id=cmes;data?source=mes;password=cmes");
????????????Ocon.Open();?
????????????OracleCommand?Ocom?=?new?OracleCommand("insert?into?c_emp1_t?(EMP_ID,EMP_PICTURE)values(:emp_id,:picture)",Ocon);
????????????Ocom.Parameters.Add(new?OracleParameter("emp_id",OracleType.Number));
????????????Ocom.Parameters.Add(new?OracleParameter("picture",OracleType.Blob));
????????????Ocom.Parameters["emp_id"].Value?=?Convert.ToDecimal(tbempid.Text);
????????????FileStream?reader?=?new?FileStream("D:/WWWROOT/MYWEB/dbtest/Image/002.bmp",FileMode.Open);//在iis中不用用“\”目錄結構應該是“/”
????????????byte[]?tempimage?=?new?byte[reader.Length];
????????????reader.Read(tempimage,0,tempimage.Length);
????????????//OracleLob?tempLob=OracleLob.Null;
????????????//tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
????????????//tempLob.Write(tempimage,0,tempimage.Length);
????????????//tempLob.EndBatch();
????????????reader.Close();
????????????Ocom.Parameters["picture"].Size?=?tempimage.Length;
????????????//tempimage.CopyTo(Ocom.Parameters["picture"].Value,0);
????????????Ocom.Parameters["picture"].Value?=?tempimage;
????????????Ocom.ExecuteNonQuery();
*/
????????????
string
?myfilename?
=
?Convert.ToString(Session[
"
filename
"
]);
????????????
if
?(myfilename?
!=
?
""
)
????????????
{
????????????????Ocom.Parameters.Clear();
????????????????Ocom.CommandText?
=
?
"
update?c_emp1_t?SET?EMP_PICTURE?=?:PICTURE?WHERE?EMP_ID=?:EMP_ID?
"
;
????????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
EMP_ID
"
,OracleType.Number));
????????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
PICTURE
"
,OracleType.Blob));
????????????????Ocom.Parameters[
"
EMP_ID
"
].Value?
=
?Convert.ToDecimal(tbempid.Text);
????????????????FileStream?reader?
=
?
new
?FileStream(
"
D:/WWWROOT/MYWEB/dbtest/Image/
"
+
myfilename,FileMode.Open);
//
在iis中不用用“\”目錄結構應該是“/”
????????????????
byte
[]?tempimage?
=
?
new
?
byte
[reader.Length];
????????????????reader.Read(tempimage,
0
,tempimage.Length);
????????????????reader.Close();
????????????????
????????????????Ocom.Parameters[
"
PICTURE
"
].Size?
=
?tempimage.Length;
????????????????Ocom.Parameters[
"
PICTURE
"
].Value?
=
?tempimage;
????????????????Ocom.ExecuteNonQuery();
????????????????Session[
"
filename
"
]?
=
?
""
;
????????????}
????????????Ocon.Close();
????????}
UPDATE:
private
?
void
?btUpdate_Click(
object
?sender,?System.EventArgs?e)
????????
{
????????????OracleConnection?Ocon?
=
?
new
??OracleConnection(
"
user?id=cmes;data?source=mes;password=cmes
"
);
????????????Ocon.Open();?
????
????????????OracleCommand?Ocom?
=
?
new
?OracleCommand(
"
UPDATE?c_emp1_t?SET?EMP_ID=?:emp_id,EMP_NO=?:emp_no,EMP_DESC=?:emp_desc,USED_DATE=?:emp_date,EMP_IC_MAC=?:emp_ic_mac,EMP_ADMIN_FLAG=?:flag?WHERE?ROWID?=?:MYROWID
"
,Ocon);
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
MYROWID
"
,OracleType.RowId));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_id
"
,OracleType.Number));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_no
"
,OracleType.VarChar));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_desc
"
,OracleType.LongVarChar));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_date
"
,OracleType.DateTime));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
flag
"
,OracleType.Char));
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emp_ic_mac
"
,OracleType.Raw));
????????????Ocom.Parameters[
"
MYROWID
"
].Value?
=
?TBROWID.Text;
????????????Ocom.Parameters[
"
emp_id
"
].Value?
=
?Convert.ToDecimal(tbempid.Text);
????????????Ocom.Parameters[
"
emp_no
"
].Value?
=
?tbempno.Text;
????????????Ocom.Parameters[
"
emp_desc
"
].Value?
=
?tbempdesc.Text;
????????????
string
?empdate?
=
?tbempdate.Text;
//
?yyyymmdd
????????????Ocom.Parameters[
"
emp_date
"
].Value?
=
????
new
?DateTime(Convert.ToInt32(empdate.Substring(
0
,
4
)),Convert.ToInt32(empdate.Substring(
4
,
2
)),Convert.ToInt32(empdate.Substring(
6
,
2
))?);
????????????
if
?(rb1.Checked)?
????????????????Ocom.Parameters[
"
flag
"
].Value?
=
?
'
1
'
;
????????????
if
?(rb2.Checked)?
????????????????Ocom.Parameters[
"
flag
"
].Value?
=
?
'
2
'
;
????????????
if
?(rb3.Checked)?
????????????????Ocom.Parameters[
"
flag
"
].Value?
=
?
'
3
'
;
????????????Ocom.Parameters[
"
emp_ic_mac
"
].Value?
=
?setraw(tbicmac.Text);????????????
????????????Ocom.ExecuteNonQuery();
????????????
string
?myfilename?
=
?Convert.ToString(Session[
"
filename
"
]);
????????????
if
?(myfilename?
!=
?
""
)
????????????
{
????????????????Ocom.Parameters.Clear();
????????????????Ocom.CommandText?
=
?
"
update?c_emp1_t?SET?EMP_PICTURE?=?:PICTURE?WHERE?EMP_ID=?:EMP_ID?
"
;
????????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
EMP_ID
"
,OracleType.Number));
????????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
PICTURE
"
,OracleType.Blob));
????????????????Ocom.Parameters[
"
EMP_ID
"
].Value?
=
?Convert.ToDecimal(tbempid.Text);
????????????????FileStream?reader?
=
?
new
?FileStream(
"
D:/WWWROOT/MYWEB/dbtest/Image/
"
+
myfilename,FileMode.Open);
//
在iis中不用用“\”目錄結構應該是“/”
????????????????
byte
[]?tempimage?
=
?
new
?
byte
[reader.Length];
????????????????reader.Read(tempimage,
0
,tempimage.Length);
????????????????reader.Close();
????????????????
????????????????Ocom.Parameters[
"
PICTURE
"
].Size?
=
?tempimage.Length;
????????????????Ocom.Parameters[
"
PICTURE
"
].Value?
=
?tempimage;
????????????????Ocom.ExecuteNonQuery();
????????????????Session[
"
filename
"
]?
=
?
""
;
????????????}
????????????Ocon.Close();
????????}
SELECT(由于圖片是直接向客戶端輸出,所以需要另一個頁面來輸入圖片):
private
?
void
?btselect_Click(
object
?sender,?System.EventArgs?e)
????????
{
????????????
if
?(TBROWID.Text.Length?
<
?
18
)
????????????
{
????????????????TBROWID.Text?
=
?
"
請輸入正確的ROWID
"
;
????????????????
return
;
????????????????
????????????}
????????????OracleConnection?Ocon?
=
?
new
??OracleConnection(
"
user?id=cmes;data?source=mes;password=cmes
"
);
????????????Ocon.Open();?
????????????OracleCommand?Ocom?
=
?
new
?OracleCommand(
"
select?EMP_ID,EMP_NO,EMP_DESC,USED_DATE,EMP_IC_MAC,EMP_ADMIN_FLAG,EMP_PICTURE?from?c_emp1_t?where?rowid?=?:emprowid
"
,Ocon);
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emprowid
"
,OracleType.RowId));
????????????Ocom.Parameters[
"
emprowid
"
].Value?
=
?TBROWID.Text;
????????????OracleDataReader?reader?
=
?Ocom.ExecuteReader();
????????????
while
?(reader.Read())
????????????
{
????????????????
if
?(
!
(reader.IsDBNull(
0
)))
????????????????tbempid.Text?
=
?Convert.ToString(?reader.GetDecimal(
0
));
????????????????
if
?(
!
(reader.IsDBNull(
1
)))
????????????????tbempno.Text?
=
?reader.GetString(
1
);
????????????????
if
?(
!
(reader.IsDBNull(
2
)))
????????????????tbempdesc.Text?
=
?reader.GetString(
2
);
????????????????
if
?(
!
(reader.IsDBNull(
3
)))
????????????????
{
????????????????????DateTime?DT?
=
?reader.GetDateTime(
3
);
????????????????????tbempdate.Text?
=
?DT.ToString(
"
yyyyMMdd
"
);
????????????????}
????????????????
????????????????
????????????????
if
?(
!
(reader.IsDBNull(
4
)))
????????????????
{
????????????????????
????????????????????
byte
[]?temp?
=
?
new
?
byte
[
4000
];
????????????????????reader.GetBytes(
4
,
0
,temp,
0
,
4000
);
????????????????????tbicmac.Text?
=
?getraw(temp);
????????????????}
????????????????
else
????????????????????tbicmac.Text?
=
?
""
;
????????????????
if
?(
!
(reader.IsDBNull(
5
)))
????????????????
{
????????????????????
/**/
/*
char?tempflag?=?reader.GetChar(5);??//不支持此方法
????????????????????switch?(tempflag)
????????????????????{
????????????????????????case?'1':
????????????????????????????rb1.Checked?=?true;break;
????????????????????????case?'2':
????????????????????????????rb2.Checked?=?true;break;
????????????????????????default?:
????????????????????????????rb3.Checked?=?true;break;
????????????????????}
*/
????????????????????
char
?tempflag?
=
?Convert.ToChar(reader.GetValue(
5
));
????????????????????
switch
?(tempflag)
????????????????????
{
????????????????????????
case
?
'
1
'
:
????????????????????????????rb1.Checked?
=
?
true
;
break
;
????????????????????????
case
?
'
2
'
:
????????????????????????????rb2.Checked?
=
?
true
;
break
;
????????????????????????
default
?:
????????????????????????????rb3.Checked?
=
?
true
;
break
;
????????????????????}
????????????????????
????????????????}
????????????????
if
?(
!
(reader.IsDBNull(
6
)))
????????????????
{
????????
????????????????????Label1.Text?
=
?
"
<img?src='webform3.aspx?ROWID=
"
+
TBROWID.Text
+
"
'>
"
;
????????????????
????????????????}
????????????}
????????????reader.Close();
????????????Ocon.Close();
????????????
????????}
webform3.aspx的程序:
????????
private
?
void
?Page_Load(
object
?sender,?System.EventArgs?e)
????????
{
????????????OracleConnection?Ocon?
=
?
new
??OracleConnection(
"
user?id=cmes;data?source=mes;password=cmes
"
);
????????????Ocon.Open();?
????????????OracleCommand?Ocom?
=
?
new
?OracleCommand(
"
select?EMP_PICTURE?from?c_emp1_t?where?rowid?=?:emprowid
"
,Ocon);
????????????Ocom.Parameters.Add(
new
?OracleParameter(
"
emprowid
"
,OracleType.RowId));
????????????Ocom.Parameters[
"
emprowid
"
].Value?
=
?Request.Params[
"
ROWID
"
];
????????????OracleDataReader?reader?
=
?Ocom.ExecuteReader();
????????????
while
?(reader.Read())
????????????
{
????????????
????????????????
if
?(
!
(reader.IsDBNull(
0
)))
????????????????
{
????????????????????OracleLob?tempBlob?
=
?reader.GetOracleLob(
0
);
????????????????????
byte
[]?tempbuffer?
=
?
new
?
byte
[tempBlob.Length];
????????????????????
//
tempBlob.BeginBatch(OracleLobOpenMode.ReadWrite);會有錯誤ORA-22292:?無法在沒有事務處理的情況下以讀寫模式打開?LOB?
????????????????????tempBlob.BeginBatch();
????????????????????tempBlob.Read(tempbuffer,
0
,tempbuffer.Length);
????????????????????tempBlob.EndBatch();
????????????????????
//
下面是把具體的文件保存出來
????????????????????BinaryWriter?writer?
=
?
new
?BinaryWriter(
new
?FileStream(
"
D:/WWWROOT/MYWEB/dbtest/Image/temp.bmp
"
,FileMode.Create));
????????????????????
for
(
int
?i
=
0
;i
<
tempbuffer.Length;i
++
)
????????????????????
{
????????????????????????writer.Write(tempbuffer[i]);
????????????????????}
????????????????????writer.Close();
????????????????????
//
下面是直接把圖片用流向客戶端輸出
????????????????????Response.BinaryWrite(tempbuffer);
????????????????????
????????????????}
????????????}
????????????reader.Close();
????????????Ocon.Close();
????????}
這些代碼在2000下測試通過的,初次寫代碼有些凌亂,請大家多多提意見
ORACLE數據庫中主要字段類型的讀寫例子(包括:Long、Raw、Blob)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元