Stream ms;
                   byte[] picbyte;
                   if ((ms = ofd.OpenFile()) != null)
                   {
                    picbyte = new byte[ms.Length];
                    ms.Position = 0;
                    ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));
                    string conn = ConfigurationManager.ConnectionStrings["oradata"].ConnectionString;
                    OracleConnection oraconn = new OracleConnection(conn);
                    string sql = "insert into datatest(signature) values(@signature)";
                    OracleCommand cmd = new OracleCommand(sql, oraconn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("@signature", OracleDbType.Blob);
                    cmd.Parameters["@signature"].Value = picbyte;
                    oraconn.Open();
                    cmd.ExecuteNonQuery();//错误提示处
                    oraconn.Close();
                    ms.Close();
                    MessageBox.Show("图片插入成功!");
                    }
错误提示:ORA-06550: 第 1 行, 第 46 列:PL/SQL: ORA-00936: 缺失表达式;ORA-06550: 第 1 行, 第 7 列:PL/SQL: SQL Statement ignored,小弟没用过存储过程,请教各位高人问题出在什么地方?

解决方案 »

  1.   

    Oracle的参数不要用@符号,直接去掉!
    string sql = "insert into datatest(signature) values(@signature)";
      OracleCommand cmd = new OracleCommand(sql, oraconn);
      cmd.CommandType = CommandType.StoredProcedure;
      cmd.Parameters.Add("@signature", OracleDbType.Blob);
      cmd.Parameters["@signature"].Value = picbyte;
      

  2.   

    在ADO.NET中使用参数化SQL语句的大同小异
      

  3.   

    在绝大部分情况下不要把图片或者文件以binary的方式存储到数据库(学习这个用法除外),因为那样效率很低。