我的本意是:采用对话框的形式,选取图片,然后将选取的图片通过过程存储到Oracle数据库中去.在执行时报错:提示:必须声明标识符"INSERTPICTURE",各位帮我分析一原因吧!!private void button1_Click(object sender, EventArgs e)
{
Stream ms;
byte[] picbyte;
//ofdSelectPic.ShowDialog();
if (ofdSelectPic.ShowDialog() == DialogResult.OK)
{
if ((ms = ofdSelectPic.OpenFile()) != null)
{
picbyte = new byte[ms.Length];
ms.Position = 0;
ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));
ms.Close();
try
{
string ConnectionString = "Data Source=myServer;Persist Security Info=True;User ID=SYSTEM;Password=manager;";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
OracleCommand cmd = new OracleCommand("insertpicture", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add (new OracleParameter("UpdateImage", OracleType.Blob));
cmd.Parameters["UpdateImage"].Value = picbyte;
conn.Open();
cmd.ExecuteNonQuery(); //报错行
cmd.Parameters.Clear();
conn.Close();
ms.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}附过程的代码:
create or replace procedure INSERTPICTURE
(
UpdateImage in BLOB
)
IS
begin
Insert into sh.test(Fimage) values (UpdateImage);
END insertpicture;
{
Stream ms;
byte[] picbyte;
//ofdSelectPic.ShowDialog();
if (ofdSelectPic.ShowDialog() == DialogResult.OK)
{
if ((ms = ofdSelectPic.OpenFile()) != null)
{
picbyte = new byte[ms.Length];
ms.Position = 0;
ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));
ms.Close();
try
{
string ConnectionString = "Data Source=myServer;Persist Security Info=True;User ID=SYSTEM;Password=manager;";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
OracleCommand cmd = new OracleCommand("insertpicture", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add (new OracleParameter("UpdateImage", OracleType.Blob));
cmd.Parameters["UpdateImage"].Value = picbyte;
conn.Open();
cmd.ExecuteNonQuery(); //报错行
cmd.Parameters.Clear();
conn.Close();
ms.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}附过程的代码:
create or replace procedure INSERTPICTURE
(
UpdateImage in BLOB
)
IS
begin
Insert into sh.test(Fimage) values (UpdateImage);
END insertpicture;
解决方案 »
- DataSet中操作
- C#获取当前IE栏完整地址
- 系统的EDIT怎么设置仅允许小数,仅允许十六进制数等限制?
- 添加了using System.Data.SqlClient、using System.Data、using System.Configuration,还是提示SqlConnection找不到命空间……
- .Net初学者,请教个问题,多谢赐教
- 请问构造怎样的文件组织结构比较好?
- 高分请教:
- 在C#中怎么样才能使用System.Data.OracleClient 命名空间??(在线等啊!)
- 如何让文本框只接受数字,其他字符不处理。
- 讨论:把JAVA程序改写为C#。。应注意的问题。。欢迎高手参与
- 来看一下有没有办法去掉这个icon
- 菜鸟问题:C#怎么把{0}原样输出
--create table InsertPicture(FImage Blob);第二步:--创建程序包
CREATE OR REPLACE PACKAGE FImage_package
AS
PROCEDURE Pro_FImage (
FImage InsertPicture.FImage%TYPE
);
end FImage_package;第三步:
--创建程序包体(只有一个参数:参数类型为BLOB)
CREATE OR REPLACE PACKAGE BODY FImage_package
AS
PROCEDURE Pro_FImage (
FImage InsertPicture.FImage%TYPE
)
AS
begin
INSERT INTO InsertPicture(FImage) VALUES (FImage);
COMMIT;
END Pro_FImage;
END FImage_package;
源代码修改为:
...................省略其他引用..........
using System.Data.OracleClient;private void button1_Click(object sender, EventArgs e)
{
Stream ms;
byte[] picbyte;
//ofdSelectPic.ShowDialog();
if (ofdSelectPic.ShowDialog() == DialogResult.OK)
{
if ((ms = ofdSelectPic.OpenFile()) != null)
{
picbyte = new byte[ms.Length];
ms.Position = 0;
ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));
ms.Close();
try
{
string ConnectionString = "Data Source=myServer;Persist Security Info=True;User ID=SYSTEM;Password=manager;";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
OracleCommand cmd = new OracleCommand("FImage_package.insertpicture", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("FImage",OracleType.Blob)); //与程序包的参数名及参数类型一致
cmd.Parameters["FImage"].Value=picbyte;
conn.Open();
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
conn.Close();
ms.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}