ORACLE数据库中主要字段类型的读写例子(包括:L

系统 1993 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元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论