我的本意是:采用对话框的形式,选取图片,然后将选取的图片通过过程存储到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;

解决方案 »

  1.   

    不会是把insertpicture当sql语句执行了吧
      

  2.   

    我已经解决此问题:第一步:--创建表
    --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); 
                                            }
                                    }
                            }
                    }
      

  3.   

    修正一个地方:OracleCommand       cmd       =       new       OracleCommand("FImage_package.insertpicture",       conn);   更必为:OracleCommand       cmd       =       new       OracleCommand("FImage_package.Pro_FImage",       conn);  //Pro_FImage为过程名