Basic SQL user database public void AddClient(Client obj){
  try{
      using(System.Data.SQLite.SQLiteConnection conn = stock.db.SqlLiteConnection.getSQLLiteConnection()){
      System.Data.SQLite.SQLiteCommand cmd = conn.CreateCommand();
      string sql="insert into Client (email,firstName,lastName,telephone,address,city,state,zip,web) values(@email,@firstName,@lastName,@telephone,@address,@city,@state,@zip,@web)";
      cmd.CommandText = sql;
      cmd.Parameters.AddWithValue("@email", obj.Email);
      cmd.Parameters.AddWithValue("@firstName", obj.FirstName);
      cmd.Parameters.AddWithValue("@lastName", obj.LastName);
      cmd.Parameters.AddWithValue("@telephone", obj.Telephone);
      cmd.Parameters.AddWithValue("@address", obj.Address);
      cmd.Parameters.AddWithValue("@city", obj.City);
      cmd.Parameters.AddWithValue("@state", obj.State);
      cmd.Parameters.AddWithValue("@zip", obj.Zip);
      cmd.Parameters.AddWithValue("@web", obj.Web);
      cmd.ExecuteNonQuery();
    }

  }catch (Exception ex){}
}


I have couple of questions for the above code


Do I have to close connection manually?
Do I need to dispose Command object?
If exception occurs, do I have to close connection and command
How do I enhance this code further?
OK, here goes:   


No. You're using using which means that the object will be disposed of in the end of the block. As part of the Dispose() method, the connection will be closed and its resources released.
Not manually, you should open another using block to cause the object to Dispose() in the end.
Thanks to the using block, when an exception occurs, the object will be disposed because you're thrown out of the block.
"Enhance" is vague...