AT+CSTT command showing error - SIM900A, Mega arduino

I want to use GPS location through a SIM900A with Mega Arduino 2560. I connected the serial data pins ( TX, RX) to 10, 11. I can make & receive calls, send & receive message. But connecting to the internet is so inconsistent maybe 1 out of 100 times. I could even retrieve IP once. I used AT+CSTT, AT+CIFSR command to do that. Please help me on this topic.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
char msg;
char call;

void setup()
{
  mySerial.begin(9600); 
  Serial.begin(9600);
  Serial.println("Enter character to select :");
  Serial.println("h : to disconnect a call");
  Serial.println("i : to receive a call");
  Serial.println("s : to send message");
  Serial.println("c : to make a call");  
  Serial.println("e : to redial");
  Serial.println("a : Access to internet");
  Serial.println();
  delay(100);
}

void loop()
{  
  if (Serial.available()>0)
   switch(Serial.read())
  {
    case 's':
      SendMessage();
      break;
    case 'c':
      MakeCall();
      break;
    case 'h':
      HangupCall();
      break;
    case 'e':
      RedialCall();
      break;
    case 'i':
      ReceiveCall();
      break;
    case 'm':
      ReceiveMessage();
    case 'a':
      access();
  }
  if (mySerial.available()>0)
  Serial.write(mySerial.read());
}

void sendcommand(char* command)
{
  mySerial.println(command);
  Serial.write(mySerial.read());
  delay(1000);
}

void access()
{
  //sendcommand("AT");
  //sendcommand("AT+CGATT?");
  //sendcommand("AT+CIPSHUT");
  //sendcommand("AT+CIPMUX = 0");
  sendcommand("AT+CSTT=\"internet\"");
  //sendcommand("AT+CIFSR");
  //Serial.println(mySerial.read());
  //sendcommand("AT+CIPSTART=\"TCP\", \"http://google.com\", \"80\"");
}

void SendMessage()
{
  mySerial.println("AT+CMGF=1");
  delay(1000);
  mySerial.println("AT+CMGS=\"+8801838626121\"\r");
  delay(1000);
  mySerial.println("sim900a sms");
  delay(100);
  mySerial.println((char)26);
  delay(1000);
}

void ReceiveMessage()
{
  Serial.print("Hello");
  mySerial.println("AT+CNMI=2,2,0,0,0");
  delay(1000);
  if (mySerial.available()>0)
  {
    msg=mySerial.read();
    Serial.print(msg);
  }
}

void MakeCall()
{
  mySerial.println("ATD+8801838626121;");
  Serial.println("Calling...");
  delay(1000);
}


void HangupCall()
{
  mySerial.println("ATH");
  Serial.println("Hanging Up Call");
  delay(1000);
}

void ReceiveCall()
{
  mySerial.println("ATA");
  delay(1000);
  {
    call=mySerial.read();
    Serial.print(call);
  }
}

void RedialCall()
{
  mySerial.println("ATDL");
  Serial.println("Redialing");
  delay(1000);
}

void getposition()
{
  
}