这里我用的是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上加:
下一步→
和代码:
privatevoidbtunload_Click(objectsender,System.EventArgse)
{
btunload.Enabled=false;
//获得文件名称stringtempfilename=IoFile.PostedFile.FileName;
//注:loFile.PostedFile.FileName返回的是通过文件对话框选择的文件名,这之中包含了文件的目录信息tempfilename=Path.GetFileName(tempfilename);
if(tempfilename.Substring(tempfilename.Length-4,4)==".bmp")
{
//去掉目录信息,返回文件名称
//判断上传目录是否存在,不存在就建立stringtempDirectory="D:/WWWROOT/MYWEB/dbtest/Image/";
if(!Directory.Exists(tempDirectory))
Directory.CreateDirectory(tempDirectory);
//上传文件到服务器stringtempPath=tempDirectory+tempfilename;//得到上传目录及文件名称IoFile.PostedFile.SaveAs(tempPath);
Label1.Text="";
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
'显示上传文件属性
Endsub*/
}
INSERT:
privatevoidBtInsert_Click(objectsender,System.EventArgse)
{
OracleConnectionOcon=newOracleConnection("userid=cmes;datasource=mes;password=cmes");
Ocon.Open();
//OracleCommandOcom=newOracleCommand("insertintoc_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);OracleCommandOcom=newOracleCommand("insertintoc_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(newOracleParameter("emp_id",OracleType.Number));
Ocom.Parameters.Add(newOracleParameter("emp_no",OracleType.VarChar));
Ocom.Parameters.Add(newOracleParameter("emp_desc",OracleType.LongVarChar));
Ocom.Parameters.Add(newOracleParameter("emp_date",OracleType.DateTime));
Ocom.Parameters.Add(newOracleParameter("flag",OracleType.Char));
Ocom.Parameters.Add(newOracleParameter("emp_ic_mac",OracleType.Raw));
//Ocom.Parameters.Add(newOracleParameter("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;
stringempdate=tbempdate.Text;//yyyymmddOcom.Parameters["emp_date"].Value=newDateTime(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是成功的
OracleConnectionOcon=newOracleConnection("userid=cmes;datasource=mes;password=cmes");
Ocon.Open();
OracleCommandOcom=newOracleCommand("insertintoc_emp1_t(EMP_ID,EMP_PICTURE)values(:emp_id,:picture)",Ocon);
Ocom.Parameters.Add(newOracleParameter("emp_id",OracleType.Number));
Ocom.Parameters.Add(newOracleParameter("picture",OracleType.Blob));
Ocom.Parameters["emp_id"].Value=Convert.ToDecimal(tbempid.Text);
FileStreamreader=newFileStream("D:/WWWROOT/MYWEB/dbtest/Image/002.bmp",FileMode.Open);//在iis中不用用“\”目录结构应该是“/”
byte[]tempimage=newbyte[reader.Length];
reader.Read(tempimage,0,tempimage.Length);
//OracleLobtempLob=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();*/stringmyfilename=Convert.ToString(Session["filename"]);
if(myfilename!="")
{
Ocom.Parameters.Clear();
mandText="updatec_emp1_tSETEMP_PICTURE=:PICTUREWHEREEMP_ID=:EMP_ID";
Ocom.Parameters.Add(newOracleParameter("EMP_ID",OracleType.Number));
Ocom.Parameters.Add(newOracleParameter("PICTURE",OracleType.Blob));
Ocom.Parameters["EMP_ID"].Value=Convert.ToDecimal(tbempid.Text);
FileStreamreader=newFileStream("D:/WWWROOT/MYWEB/dbtest/Image/"+myfilename,FileMode.Open);//在iis中不用用“\”目录结构应该是“/”byte[]tempimage=newbyte[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:
privatevoidbtUpdate_Click(objectsender,System.EventArgse)
{
OracleConnectionOcon=newOracleConnection("userid=cmes;datasource=mes;password=cmes");
Ocon.Open();
OracleCommandOcom=newOracleCommand("UPDATEc_emp1_tSETEMP_ID=:emp_id,EMP_NO=:emp_no,EMP_DESC=:emp_desc,USED_DATE=:emp_date,EMP_IC_MAC=:emp_ic_mac,EMP_ADMIN_FLAG=:flagWHEREROWID=:MYROWID",Ocon);
Ocom.Parameters.Add(newOracleParameter("MYROWID",OracleType.RowId));
Ocom.Parameters.Add(newOracleParameter("emp_id",OracleType.Number));
Ocom.Parameters.Add(newOracleParameter("emp_no",OracleType.VarChar));
Ocom.Parameters.Add(newOracleParameter("emp_desc",OracleType.LongVarChar));
Ocom.Parameters.Add(newOracleParameter("emp_date",OracleType.DateTime));
Ocom.Parameters.Add(newOracleParameter("flag",OracleType.Char));
Ocom.Parameters.Add(newOracleParameter("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;
stringempdate=tbempdate.Text;//yyyymmddOcom.Parameters["emp_date"].Value=newDateTime(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();
stringmyfilename=Convert.ToString(Session["filename"]);
if(myfilename!="")
{
Ocom.Parameters.Clear();
mandText="updatec_emp1_tSETEMP_PICTURE=:PICTUREWHEREEMP_ID=:EMP_ID";
Ocom.Parameters.Add(newOracleParameter("EMP_ID",OracleType.Number));
Ocom.Parameters.Add(newOracleParameter("PICTURE",OracleType.Blob));
Ocom.Parameters["EMP_ID"].Value=Convert.ToDecimal(tbempid.Text);
FileStreamreader=newFileStream("D:/WWWROOT/MYWEB/dbtest/Image/"+myfilename,FileMode.Open);//在iis中不用用“\”目录结构应该是“/”byte[]tempimage=newbyte[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(由于图片是直接向客户端输出,所以需要另一个页面来输入图片):
privatevoidbtselect_Click(objectsender,System.EventArgse)
{
if(TBROWID.Text.Length<18)
{
TBROWID.Text="请输入正确的ROWID";
return;
}OracleConnectionOcon=newOracleConnection("userid=cmes;datasource=mes;password=cmes");
Ocon.Open();
OracleCommandOcom=newOracleCommand("selectEMP_ID,EMP_NO,EMP_DESC,USED_DATE,EMP_IC_MAC,EMP_ADMIN_FLAG,EMP_PICTUREfromc_emp1_twhererowid=:emprowid",Ocon);
Ocom.Parameters.Add(newOracleParameter("emprowid",OracleType.RowId));
Ocom.Parameters["emprowid"].Value=TBROWID.Text;
OracleDataReaderreader=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)))
{
DateTimeDT=reader.GetDateTime(3);
tbempdate.Text=DT.ToString("yyyyMMdd");
}
if(!(reader.IsDBNull(4)))
{
byte[]temp=newbyte[4000];
reader.GetBytes(4,0,temp,0,4000);
tbicmac.Text=getraw(temp);
}elsetbicmac.Text="";
if(!(reader.IsDBNull(5)))
{
/**//*chartempflag=reader.GetChar(5);//不支持此方法
switch(tempflag)
{
case'1':
rb1.Checked=true;break;
case'2':
rb2.Checked=true;break;
default:
rb3.Checked=true;break;
}*/chartempflag=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="";
}}reader.Close();
Ocon.Close();
}
webform3.aspx的程序:
privatevoidPage_Load(objectsender,System.EventArgse)
{
OracleConnectionOcon=newOracleConnection("userid=cmes;datasource=mes;password=cmes");
Ocon.Open();
OracleCommandOcom=newOracleCommand("selectEMP_PICTUREfromc_emp1_twhererowid=:emprowid",Ocon);
Ocom.Parameters.Add(newOracleParameter("emprowid",OracleType.RowId));
Ocom.Parameters["emprowid"].Value=Request.Params["ROWID"];
OracleDataReaderreader=Ocom.ExecuteReader();
while(reader.Read())
{
if(!(reader.IsDBNull(0)))
{
OracleLobtempBlob=reader.GetOracleLob(0);
byte[]tempbuffer=newbyte[tempBlob.Length];
//tempBlob.BeginBatch(OracleLobOpenMode.ReadWrite);会有错误ORA-22292:无法在没有事务处理的情况下以读写模式打开LOBtempBlob.BeginBatch();
tempBlob.Read(tempbuffer,0,tempbuffer.Length);
tempBlob.EndBatch();
//下面是把具体的文件保存出来BinaryWriterwriter=newBinaryWriter(newFileStream("D:/WWWROOT/MYWEB/dbtest/Image/temp.bmp",FileMode.Create));
for(inti=0;i
{
writer.Write(tempbuffer[i]);
}writer.Close();
//下面是直接把图片用流向客户端输出Response.BinaryWrite(tempbuffer);
}}reader.Close();
Ocon.Close();
}这些代码在2000下测试通过的,初次写代码有些凌乱,请大家多多提意见