下面代码报错ORA-01008: 并非所有变量都已绑定,网上找了一圈,也没解决,高手帮忙。String sql = "";
for (int i = 0; i < clDs.Tables[0].Rows.Count; i++)
{
    sql = @"insert into vh_calls(id_call) values( :id_call)";    OracleConnection connection = new OracleConnection(constr);
    connection.Open();
    OracleCommand command = null;
    command = new OracleCommand(sql, connection);
    command.Parameters.AddWithValue("id_call", clDs.Tables[0].Rows[i][0] == DBNull.Value ? DBNull.Value : clDs.Tables[0].Rows[i][0]);    try
    {
        command = new OracleCommand(sql, connection);
        command.ExecuteNonQuery();
        command.Dispose();    }
    catch (System.Exception ex)
    {
        throw ex;
    }
    connection.Close();
    connection.Dispose();
}

解决方案 »

  1.   

    command = new OracleCommand(sql, connection);重新new了而且循环插入,没必要这么new啊
    修改:using (OracleConnection connection = new OracleConnection(constr))
    {
        connection.Open();
        using (OracleCommand command = new OracleCommand(sql, connection))
        {
            foreach (DataRow row in clDs.Tables[0].Rows)
            {
                command.Parameters.AddWithValue("id_call", row[0] == DBNull.Value ? DBNull.Value : rows[0]);
                command.ExecuteNonQuery();
                command.Parameters.Clear();
            }
        }
        connection.Close();
    }
      

  2.   


    try
      {
      command = new OracleCommand(sql, connection);//去掉
      command.ExecuteNonQuery();
      command.Dispose();  }
      

  3.   

    原则上把try里的第一个command = new OracleCommand(sql, connection);去掉即可。
    如果要优化,那么就应该外部添加一个空值参数id_call,
    循环遍历中执行command.Parameters["id_call"] = ...
      

  4.   

    检查绑定的count数和实际的参数