这里我用的是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.EventArgs e)
{
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
' 显示上传文件属性
End sub*/
}
INSERT:
privatevoidBtInsert_Click(objectsender, System.EventArgs e)
{
OracleConnection Ocon=newOracleConnection("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=newOracleCommand("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(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(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;
stringempdate=tbempdate.Text;//yyyymmdd
Ocom.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是成功的
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();*/
stringmyfilename=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(newOracleParameter("EMP_ID",OracleType.Number));
Ocom.Parameters.Add(newOracleParameter("PICTURE",OracleType.Blob));
Ocom.Parameters["EMP_ID"].Value=Convert.ToDecimal(tbempid.Text);
FileStream reader=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.EventArgs e)
{
OracleConnection Ocon=newOracleConnection("user id=cmes;data source=mes;password=cmes");
Ocon.Open();
OracleCommand Ocom=newOracleCommand("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(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;//yyyymmdd
Ocom.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();
Ocom.CommandText="update c_emp1_t SET EMP_PICTURE = :PICTURE WHERE EMP_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);
FileStream reader=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.EventArgs e)
{
if(TBROWID.Text.Length<18)
{
TBROWID.Text="请输入正确的ROWID";
return;
}
OracleConnection Ocon=newOracleConnection("user id=cmes;data source=mes;password=cmes");
Ocon.Open();
OracleCommand Ocom=newOracleCommand("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(newOracleParameter("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=newbyte[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;
}*/
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.EventArgs e)
{
OracleConnection Ocon=newOracleConnection("user id=cmes;data source=mes;password=cmes");
Ocon.Open();
OracleCommand Ocom=newOracleCommand("select EMP_PICTURE from c_emp1_t where rowid = :emprowid",Ocon);
Ocom.Parameters.Add(newOracleParameter("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=newbyte[tempBlob.Length];
//tempBlob.BeginBatch(OracleLobOpenMode.ReadWrite);会有错误ORA-22292: 无法在没有事务处理的情况下以读写模式打开 LOB
tempBlob.BeginBatch();
tempBlob.Read(tempbuffer,0,tempbuffer.Length);
tempBlob.EndBatch();
//下面是把具体的文件保存出来
BinaryWriter writer=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下测试通过的,初次写代码有些凌乱,请大家多多提意见