c# - 使用 C# 应用程序中的 OleDb 在 Oracle 数据库中插入图像
问题描述
我想使用 OleDb 和 C# 应用程序将 PNG 图像插入 OracleDatabase。该表如下所示:
CREATE TABLE Plant
(
Id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
Name VARCHAR2(50) NOT NULL,
Image BLOB null,
CONSTRAINT plant_pk PRIMARY KEY (Id)
);
下面是代码:
public static void AddBinaryParameterToCommand(OleDbCommand cmd, string parameterColumn, object parameter)
{
if (cmd != null)
{
if (parameter != null && !parameter.ToString().Equals(""))
{
OleDbParameter blobParameter = new OleDbParameter();
blobParameter.OleDbType = OleDbType.LongVarBinary;
blobParameter.Direction = ParameterDirection.InputOutput;
blobParameter.ParameterName = parameterColumn;
blobParameter.Value = parameter;
cmd.Parameters.Add(blobParameter);
}
else
cmd.Parameters.Add(new OleDbParameter(parameterColumn, DBNull.Value));
}
}
public int InsertPlant(string name, byte[] image)
{
int id = 0;
using (var connection = new OleDbConnection(ConnectionString))
{
var commandGetIdText = @"SELECT MAX(id) FROM PLANT";
connection.Open();
using (var command = new OleDbCommand(commandGetIdText, connection))
{
using (var reader = command.ExecuteReader())
{
reader.Read();
id = int.Parse(reader[0].ToString()) + 1;
}
}
var commandText = string.Format("INSERT INTO PLANT(ID,NAME,IMAGE) VALUES (?, ?, ?)");
using (var command = new OleDbCommand(commandText, connection))
{
Utils.AddParameterToCommand(command, "ID", id);
Utils.AddParameterToCommand(command, "NAME", name);
Utils.AddBinaryParameterToCommand(command, "IMAGE", image);
command.ExecuteNonQuery();
connection.Close();
}
}
return id;
}
private void button_UploadMap_Click(object sender, EventArgs e)
{
var openFileDialog = new OpenFileDialog
{
Multiselect = true
};
var path = string.Empty;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
path = openFileDialog.FileName;
}
else
{
return;
}
byte[] imageArray = File.ReadAllBytes(path);
var palletMapDL = new PalletMapDL("Data Source=192.168.1.21/orcl;Persist Security Info=True; Password=test;User ID=test; Provider=MSDAORA; OLEDB.NET=True; PLSQLRSet=1");
palletMapDL.InsertPlant("Test Plant 01", imageArray);
当执行 command.ExecuteNonQuery(); 我收到此错误消息:
System.InvalidOperationException: 'Command parameter[2]'' 由于符号不匹配或数据溢出以外的原因,无法转换数据值。
OleDbException:“MSDAORA”失败,没有可用的错误消息,结果代码:DB_E_ERRORSOCCURRED(0x80040E21)。
你知道可能是什么问题吗?
谢谢
解决方案
推荐阅读
- python - Pandas 如何对数据帧进行转置以获取剩余两列的值
- python - 如何在一个范围内过滤熊猫组中的元素
- c# - JSON 没有正确反序列化大对象
- typescript - 我怎样才能让这个解析函数返回一个类型化的值?
- python - 使用 pytest 覆盖率,有没有办法判断哪些测试调用了特定语句?
- python - Django仅在新警报上发送电子邮件警报
- wso2 - Wso2 EI 7.1.0 的 JNDI 配置
- python - 在 python Azure Functions 中自定义日志格式
- r - R 面板数据 - 获取当前和所有连续波之间的公共变量
- typescript - 奇怪的 TypeScript 输入问题(TS 错误代码 2349)