namespace Oracle存取文件 {
using namespace System::Data::OleDb;
using namespace System::IO;
System::Void Form1::button1_Click(System::Object^ sender, System::EventArgs^ e)
{
//连接字符串
String^ FileName = "E:\\Test1.txt";
String^ conn_str = "Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=TRUE;USER ID=sa;" + "Data Source=Insight";
OleDbConnection^ cn = gcnew OleDbConnection(conn_str); //创建连接对象
cn->Open();
OleDbCommand^ cmd = gcnew OleDbCommand("UPDATE BLOB SET FILECONTENT = ? ",cn);//更新命令
cmd->Parameters->Add("FILECONTENT", OleDbType::Binary);
//文件流句柄
FileStream^ fs = gcnew FileStream(FileName, FileMode::OpenOrCreate, FileAccess::Read);
array<Byte>^ MyData = gcnew array<Byte>(System::Convert::ToInt32(fs->Length));
//将文件内容保存到字节数组
fs->Read(MyData, 0, System::Convert::ToInt32(fs->Length));
fs->Close();
cmd->Parameters["FILECONTENT"]->Value = MyData;
try
{
int result = cmd->ExecuteNonQuery();
if (result < 1) //如果数据库中没有,则进行插入
{
OleDbCommand^ cmd1 = gcnew OleDbCommand("INSERT INTO BLOB (FILECONTENT) VALUES(?)", cn);
cmd1->Parameters->Add("FILECONTENT", OleDbType::Binary);
cmd1->Parameters["FILECONTENT"]->Value = MyData;
cmd1->ExecuteNonQuery();
}
}
catch(Exception^ e1)
{
MessageBox::Show(e1->Message);
}
finally
{
cn->Close();
MessageBox::Show("文件已经成功存入数据库");
}
}
System::Void Form1::button2_Click(System::Object^ sender, System::EventArgs^ e)
{
//连接字符串
String ^conn_str = "Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=TRUE;USER ID=sa;"
+ "Data Source=Insight";
OleDbConnection^ conn = gcnew OleDbConnection(conn_str);
OleDbCommand ^cmd = gcnew OleDbCommand("SELECT FILECONTENT FROM BLOB", conn);
conn->Open(); //打开数据库
FileStream^ fs; //文件流句柄
BinaryWriter^ bw; //将BLOB类型转换为二进制流
int bufferSize = 100; //字节数组大小.
array<Byte>^outbyte = gcnew array<Byte>(bufferSize); //字节数组
long retval; //返回的字节数
long startIndex = 0; //从BLOB读取的开始位置
//CommandBehavior.SequentialAccess提供一种方法,
//以便 DataReader 处理包含带有大二进制值的列的行
OleDbDataReader^ myReader = cmd->ExecuteReader();
bool Check = false;
while (myReader->Read())
{
Check = true;
fs = gcnew FileStream("E:\\TestAgain1.txt",
FileMode::OpenOrCreate, FileAccess::Write);
//将文件流转换为二进制字节流
bw = gcnew BinaryWriter(fs);
//从索引0再开始
startIndex = 0;
//返回字节个数
retval = myReader->GetBytes(0, startIndex, outbyte, 0, bufferSize);
//写入文件
while (retval == bufferSize)
{
bw->Write(outbyte);
//清理当前编写器的所有缓冲区
bw->Flush();
startIndex += bufferSize;
retval = myReader->GetBytes(0, startIndex, outbyte, 0, bufferSize);
}
bw->Write(outbyte, 0, (int)retval);
bw->Flush();
bw->Close();
fs->Close();
}
if (Check != true)
{
MessageBox::Show("数据库中没有该文件!");
}
else
{
MessageBox::Show("文件已成功读取并保存!");
}
myReader->Close();
conn->Close();
}
}