我以前是用的拼Sql的方法来对数据库进行操作,现在要改成传参数的方式,就是这样的
以前:OracleConnection conn = new OracleConnection(DataString);
   OracleCommand cmd = new OracleCommand(Sql,conn);
   cmd.Connection.Open();
   cmd.ExecuteNonQuery();
   cmd.Connection.Close();
现在:Sql中有参数
      OracleConnection conn = new OracleConnection(DataString);
      OracleCommand cmd = new OracleCommand(Sql,conn);
      cmd.Parameters.Add(PName[i],OracleType.Number);
      cmd.Parameters[PName[i]].Value = PValue[j];//这里只写了一个参数,旨在说明方法,实际的程序中i是自增变量,通过循环,把所有的参数附值,Sql中已经通过参数的数组把参数传了进去。
      cmd.Connection.Open();
      cmd.ExecuteNonQuery();
      cmd.Connection.Close();
我现在要解决的问题:
1、如何通过上面第二种方式(既传参数的方式)把空值传入Oracle数据库中,好像DBNull.Value不行
2、参数传递过程中,对参数的要求,如OracleType.Varchar类型是对应字符串
3、加参数时对参数的长度要求,我只会在整数时控制,但是到了有小数的时候,怎么控制

解决方案 »

  1.   

    1、如何通过上面第二种方式(既传参数的方式)把空值传入Oracle数据库中,好像DBNull.Value不行
    用null行吗private SqlCommand CreateCommand(string procName, SqlParameter[] prams) {
    // make sure connection is open
    Open(); //command = new SqlCommand( sprocName, new SqlConnection( ConfigManager.DALConnectionString ) );
    SqlCommand cmd = new SqlCommand(procName, con);
    cmd.CommandType = CommandType.StoredProcedure; // add proc parameters
    if (prams != null) {
    foreach (SqlParameter parameter in prams)
    cmd.Parameters.Add(parameter);
    }

      // return param
    cmd.Parameters.Add(
    new SqlParameter("ReturnValue", SqlDbType.Int, 4,
    ParameterDirection.ReturnValue, false, 0, 0,
    string.Empty, DataRowVersion.Default, null)); return cmd;
    }
      

  2.   

    TO:goody9807()
    SqlServer的空值用DBNull.Value是可以的,我以前试过,可我现在用的是Oracle,有点不一样
      

  3.   

    1.
    public void CreateOracleParameter() 
    {
       OracleParameter myParameter = new OracleParameter("DName", OracleType.VarChar, 14);
       myParameter.IsNullable = true;
       //你加这句试试;你那个字段是否设了不能空?DBNull.Value没问题
       myParameter.Direction = ParameterDirection.Output;
               
    }
      

  4.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoracleclientoracletypeclasstopic.asp
      

  5.   

    OracleConnection conn = new OracleConnection(DataString);
    //conn.Open();
          OracleCommand cmd = new OracleCommand(Sql,conn);
    //cmd.CommandType = CommandType.StoredProcedure;