Xpoint
   [напомнить пароль]

Помогите разобраться, то ли ODP.NET гонит, то ли сама СУБД парится

Метки: [без меток]
2007-11-14 04:46:08 [обр] Top manager(0/2)[досье]

вот код c#

Program.User["Login"] = inLogin.Text.Trim();
Program.User["Password"] = inPassword.Text.Trim();

OracleConnectionStringBuilder ConnectionStr = new OracleConnectionStringBuilder();
ConnectionStr.UserID = Reports.Program.User["Login"].ToString();
ConnectionStr.Password = Reports.Program.User["Password"].ToString();
ConnectionStr.DataSource = "SCOREDB";
Program.connection = new OracleConnection(ConnectionStr.ConnectionString);

try
{
    Program.connection.Open();
    Program.ConnectionExists = true;
    this.Close();
}
catch (OracleException ex)
{
    MessageBox.Show(ex.Message.Replace("ORA-" + ex.Number.ToString() + ": ", ""), "Ошибка соединения!");
}

OracleCommand cmd = new OracleCommand("Reports_NBK.type001");
cmd.Connection = Program.connection;
cmd.CommandType = CommandType.StoredProcedure;
OracleCommandBuilder.DeriveParameters(cmd);
cmd.Parameters[0].Value = Year.Value;
cmd.Parameters[1].Value = Month.Value;
cmd.Parameters[2].Value = "0        ";
cmd.Parameters[3].Value = "0";
cmd.Parameters[4].Value = "0";
cmd.Parameters[5].Value = "0";

cmd.ExecuteNonQuery();

Program.connection.Close();
Program.connection.Dispose();

вот процедура в Oracle

procedure type001
(
   y in varchar2
   ,m in varchar2
   ,step in varchar2
   ,title out varchar2
   ,amt out varchar2
   ,cnt out varchar2
) as
   title2 varchar2(150);
   int_amt number;
   int_cnt number;
begin
   amt:=0;
   cnt:=0;

   if step='0' then
      title:='Оплата услуг операторов сотовой связи';
      select sum(i01_amt), count(*)
      into int_amt, int_cnt
      from i01_tmp_trn
      where i01_knp='852' and i01_msg_system='OFF_NET' and i01_date like y||m||'%' and i01_ben_trn in ('600700171535','600600021605','600900131390');
   end if;
. . .

А Это ошибка которая выходит если я делаю в процедуре какой либо более или менее сложный запрос по большому количеству записей

Oracle.DataAccess.Client.OracleException was unhandled
  Message="ORA-01722: invalid number\nORA-06512: at \"PAYPROC.REPORTS_NBK\", line 23\nORA-06512: at line 1"
  Source="Oracle Data Provider for .NET"
  ErrorCode=-2147467259
  DataSource="SCOREDB"
  Number=1722
  Procedure="Reports_NBK.type001"
  StackTrace:
       at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure)
       at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src)
       at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
       at Reports.NB.EBank.MainForm.GetReport_Click(Object sender, EventArgs e) in \\ххх\Visual Studio 2005\Projects\Reports\Reports\Reports\NB\EBank\MainForm.cs:line 50
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at Reports.Program.Main() in \\ххх\Visual Studio 2005\Projects\Reports\Reports\Reports\Program.cs:line 25
       at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
       at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
       at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
       at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
спустя 6 часов [обр] GRAy(0/259)[досье]
Top manager[досье] Очень маловероятно что ошибка "invalid number" вызвана какими-то проблемами с ODP.NET или СУБД. Скорее всего у вас проблемы с самими данными в таблице. У вас наверняка проблемы с преобразованием типов данных но без структуры таблицы сказать где точно проблема затруднительно. Структуру в студию, а может и сами дальше догадаетесь ;)
спустя 7 часов [обр] Кирилл [Kirk] Королев(2/673)[досье]
cmd.Parameters[2].Value = "0 ";
Это опечатка? Оракла не имею, а MSSQL на select cast('0 ' as int) (за нулем - табуляция) дает ошибку.
Powered by POEM™ Engine Copyright © 2002-2005