将二进制数据到C#神谕 [英] Insert binary data into oracle in C#

查看:130
本文介绍了将二进制数据到C#神谕的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从传统的ASP迁移到.NET。

I'm trying to move from classic asp to .net.

我有这样的code接受一个上传并保存到Oracle数据库。
我该怎么做这在C#中最简单的方法,在几线?

I have this code that takes an upload and saves it to an oracle database. How do I do this in C# in the easiest way, in a few lines ?

要特别一preaciate答案的作品很像下面,让我可以更好的关系...

Would especially apreaciate answers that works a lot like the below, so that I can relate better...

Dim Conn, Rs, SQL
Set Conn = Server.CreateObject("ADODB.Connection")
Set Rs = Server.CreateObject("ADODB.Recordset")

Conn.Open GetConnString

Rs.Open "select * from EMPIMAGE.imageupload where Id=142", Conn, 3, 3
if fileSize > 0 and Request.ServerVariables("LOGON_USER") <> "" Then
    Rs.Fields("UPLOAD_USER") = Request.ServerVariables("LOGON_USER")
    Rs.Fields("FILESIZE") = fileSize
    Rs.Fields("FILENAME") = fileName
    RS.Fields("data").AppendChunk fileData
    Rs.Update()
End If    
Rs.Close()
Conn.Close
Set Rs = Nothing
Set Conn = Nothing

先谢谢了。

推荐答案

作为的问题
的一个回答@ayush
插入一滴在Oracle数据库与C#

As answered by @ayush in one of the question
Insert blob in oracle database with C#

下面是使用C#和程序中插入的Oracle BLOB数据为例(你说的preFER,这意味着你可能)。

Here is an example to insert blob data in oracle using c# and procedures (you said prefer that means you may).

using System;
using System.Data;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using System.IO;
using System.Text;

//Step 1
// Connect to database
// Note: Modify User Id, Password, Data Source as per your database setup
string constr = "User Id=Scott;Password=tiger;Data Source=orcl9i";

OracleConnection con = new OracleConnection(constr);
con.Open();
Console.WriteLine("Connected to database!");

// Step 2
// Note: Modify the Source and Destination location
// of the image as per your machine settings
String SourceLoc  = "D:/Images/photo.jpg";
String DestinationLoc = "D:/Images/TestImage.jpg";

// provide read access to the file

FileStream fs = new FileStream(SourceLoc, FileMode.Open,FileAccess.Read);

// Create a byte array of file stream length
byte[] ImageData = new byte[fs.Length];

//Read block of bytes from stream into the byte array
fs.Read(ImageData,0,System.Convert.ToInt32(fs.Length));

//Close the File Stream
fs.Close();

// Step 3
// Create Anonymous PL/SQL block string
String block = " BEGIN " +
               " INSERT INTO testblob (id, photo) VALUES (100, :1); " +
               " SELECT photo into :2 from testblob WHERE id = 100; " +
               " END; ";

// Set command to create Anonymous PL/SQL Block
OracleCommand cmd = new OracleCommand();
cmd.CommandText = block;
cmd.Connection = con;


// Since executing an anonymous PL/SQL block, setting the command type
// as Text instead of StoredProcedure
cmd.CommandType = CommandType.Text;

// Step 4
// Setting Oracle parameters

// Bind the parameter as OracleDbType.Blob to command for inserting image
OracleParameter param = cmd.Parameters.Add("blobtodb", OracleDbType.Blob);
param.Direction = ParameterDirection.Input;


// Assign Byte Array to Oracle Parameter
param.Value = ImageData;

// Bind the parameter as OracleDbType.Blob to command for retrieving the image
OracleParameter param2 = cmd.Parameters.Add("blobfromdb", OracleDbType.Blob);
param2.Direction = ParameterDirection.Output;

// Step 5
// Execute the Anonymous PL/SQL Block

// The anonymous PL/SQL block inserts the image to the
// database and then retrieves the images as an output parameter
cmd.ExecuteNonQuery();
Console.WriteLine("Image file inserted to database from " + SourceLoc);

// Step 6
// Save the retrieved image to the DestinationLoc in the file system

// Create a byte array
byte[] byteData = new byte[0];

// fetch the value of Oracle parameter into the byte array
byteData = (byte[])((OracleBlob)(cmd.Parameters[1].Value)).Value;

// get the length of the byte array
int ArraySize = new int();
ArraySize = byteData.GetUpperBound(0);

// Write the Blob data fetched from database to the filesystem at the
// destination location
FileStream fs1 = new FileStream(@DestinationLoc,
                                FileMode.OpenOrCreate, FileAccess.Write);
fs1.Write(byteData, 0,ArraySize);
fs1.Close();

Console.WriteLine("Image saved to " + DestinationLoc + " successfully !");
Console.WriteLine("");
Console.WriteLine("***********************************************************");
Console.WriteLine("Before running this application again, execute 'Listing 1' ");

这篇关于将二进制数据到C#神谕的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆